PC で文字列を受け取ります。これは基本的に、バイトごとにいくつかの短い文字列のシーケンスです。その文字列を構造体に入れる必要があります。たとえば、Hello!
次の構造体 に入れる必要があります。
public struct serialPacket
{
public ushort first;
public ushort second;
public ushort third;
}
このように取得するには:
temp.first=0x6548;
temp.second=0x6c6c;
temp.third=0x216f;
エンディアンについてはよくわかりませんが、今のところ問題ありません。
C/C++ ではポインターを少し使用するだけで簡単に実行できるため、私は本当にイライラしていますが、C# で修正する方法がわかりません。
私はMarshal
これを処理するために使用していますが、結果としていくつかのジャンクが得られます:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct serialPacket
{
[MarshalAs(UnmanagedType.U2)]
public ushort first;
[MarshalAs(UnmanagedType.U2)]
public ushort second;
[MarshalAs(UnmanagedType.U2)]
public ushort third;
}
...
IntPtr pBuf = Marshal.StringToBSTR(indata);
serialPacket ms = (serialPacket)Marshal.PtrToStructure(pBuf, typeof(serialPacket));
Marshal.FreeBSTR(pBuf);
結果: 1st 101
2nd 72
3rd 108
ushort を 1 バイトずつマーシャリングするように見えます。ストリング自体は、1 回のショットで完全に受信されます。そして最後に 0x0D を NewLine として受け取ります。