读取字符串并将内容放入struct

时间:2012-09-24 00:33:26

标签: c# string struct

我在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

1 个答案:

答案 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!"