我正在将字节打包到结构体中,其中一些字节对应于Unicode字符串。以下内容适用于ASCII字符串:
[StructLayout(LayoutKind.Sequential)]
private struct PacketBytes
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
public string MyString;
}
我假设我可以做到。
[StructLayout(LayoutKind.Sequential)]
private struct PacketBytes
{
[MarshalAs(UnmanagedType.LPWStr, SizeConst = 32)]
public string MyString;
}
我曾试图将其转换为Unicode,但失败了(该字段的值为空,其他字段的值不正确,表明字节解包混乱)。由于该字段是结构体中的一部分,而结构体中还有其他字段(为了清晰起见,我已省略),因此我不能简单地更改包含结构体的CharSet。
你有什么想法吗?
以下是输入内容(64个字节,小端):
31:00:31:00:32:00:33:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
输出应该是Unicode字符串"1123"。
_UNICODE
宏,而在C/C++代码中的_UNICODE
和UNICODE
宏并不过时。TStr
仅意味着使用由CharSet
参数指定的编码。 - Philipp