我在 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
看起来更像是按单个字节编组撕裂 ushorts。一次性接收完整的字符串本身。最后以 0x0D 作为 NewLine 接收