1
我在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);
结果: 2日72
单看起来更像编组眼泪ushorts开字节。字符串本身收到完整,只需一次拍摄。它接收到具有0X0D在最后一个换行符