2012-09-24 46 views
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在最后一个换行符

回答

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!" 
相关问题