バイナリシリアル化されたネットワークパケットを受信するプログラムがあります。現在、ポインタを使用して、バイト配列から構造体にデータを直接格納する方法があります。しかし、私が今必要としているのは、バイト配列からコピーする簡単な方法を維持しながら、構造体にもUTF文字列を格納する方法です。文字列の前には、文字列のバイト単位の長さを示すunsignedshortが付いていると見なされます。これは、C#が内部でchar []または文字列を格納する方法ですか、それとも格納するために独自の構造体を作成する必要がありますか?
私の現在の構造体レイアウトは次のようになります。
public struct GenericPacket
{
public short packetid;
public static GenericPacket ReadUsingPointer(byte[] data)
{
unsafe
{
fixed (byte* packet = &data[0])
{
return *(GenericPacket*)packet;
}
}
}
}
ポインタを使用した読み取りは、単にバイト配列を受け取り、それにポインタを返しますが、GenericStructとして返します。これはすべての通常のタイプで機能しますが、文字列はより複雑です。
アイデアをありがとう!