我知道SizeOf()应该用于与非托管代码交互,但我的问题是为什么System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.Char))返回1而不是2?我假设C# char应该与大小为2字节的非托管wchar_t等效。那会引起麻烦吗?
发布于 2014-09-27 02:59:43
来自Marshal.SizeOf
对于字符类型,大小受应用于该类的
CharSet值的影响。
根据CharSet枚举的说法,默认情况是CharSet.Ansi
虽然公共语言运行库默认设置为
Auto,但语言可以重写此默认设置。例如,默认情况下,C#将所有方法和类型标记为Ansi。
例如:
[StructLayout(LayoutKind.Sequential)]
struct A
{
char c;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct B
{
char c;
}
....
Console.WriteLine("{0} {1}", Marshal.SizeOf(typeof(A)), Marshal.SizeOf(typeof(B)));输出是
1 2https://stackoverflow.com/questions/26070806
复制相似问题