İsteğiniz tek bayt karakterlerden oluşan bir uzunluk öneki dize gerektirir gibi görünüyor, bu yüzden olacak Unicode karakterleri kullanır C # biraz daha fazla çalışma ihtiyacı olacak. Ben UTF-8 ile kodlanmış XML sizin dize istiyorum kabul edeceğim. Biz de onun araya edildiği zaman, bunun yerine bir bayt dizisi kullanacağız, isteği tutmak için bir dize kullanmak mümkün olmayacaktır.
using System;
using System.IO;
using System.Text;
class Program
{
static void
Main(string[] args)
{
string xml = "<xml><request>...[snipped for brevity]...</request></xml>";
using ( MemoryStream stream = new MemoryStream() )
{
using ( BinaryWriter writer = new BinaryWriter(stream) )
{
byte [] encodedXml = Encoding.UTF8.GetBytes(xml);
writer.Write(ToBigEndian(encodedXml.Length + 4));
writer.Write(encodedXml);
}
byte [] request = stream.ToArray();
// now use request however you like
}
}
static byte []
ToBigEndian(int value)
{
byte [] retval = BitConverter.GetBytes(value);
if ( BitConverter.IsLittleEndian )
{
Array.Reverse(retval);
}
return retval;
}
}
Burada dikkat edilmesi gereken başka bir şey olduğunu da önde gelen 4 bayt 'N' parametresi güçleri büyük endian ile php pack () fonksiyonu. Bu nedenle herhangi bir platformda büyük endian içine dönüşüm işlemek için ToBigEndian () yöntemini yazdı.