【发布时间】:2014-12-29 19:30:44
【问题描述】:
如果我这样做
char c = 'A';
byte[] b = BitConverter.GetBytes(c);
b 的长度为 2。
但是,如果我有以下用于互操作目的的结构
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct MyStruct
{
int i;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
char[] c;
public int TheInt
{
get { return i; }
set { i = value; }
}
public string TheString
{
get { return new string(c); }
set { c = value.ToCharArray(); }
}
}
然后做
MyStruct m = new MyStruct();
m.TheInt = 10;
m.TheString = "Balloons";
int mSize = Marshal.SizeOf(m);
mSize 是 12,而不是我预期的 20。
MSDN 说字符存储是 2 个字节。 第一个例子支持这一点。
我的结构做错了吗? 我错过了什么吗?
【问题讨论】:
标签: c# struct char interop marshalling