我在PC上收到一个字符串,它基本上是一个每字节字节序列的几个短路。我需要将该字符串放入struct中。例如,我需要将Hello!
放入此结构中:
public struct serialPacket
{
public ushort first;
public ushort second;
public ushort third;
}
得到这样的结果:
temp.first=0x6548;
temp.second=0x6c6c;
temp.third=0x216f;
我对endianness不太确定,但现在这没关系
我真的很沮丧,因为在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);
结果: 第101期 2月72日 3月108日 看起来更像是单个字节分组的分组。字符串本身只需一次即可完成。最后收到一个0x0D作为NewLine
答案 0 :(得分:0)
这对我有用:
temp.first = 0x6548;
temp.second = 0x6c6c;
temp.third = 0x216f;
Func<ushort, string> conv = u =>
{
var bs = BitConverter.GetBytes(u);
return System.Text.ASCIIEncoding.ASCII.GetString(bs);
};
var query =
from u in new [] { temp.first, temp.second, temp.third, }
select conv(u);
var result = String.Join("", query);
// result == "Hello!"