Reg*_*lez 2 c# boolean sizeof bitconverter
让我们考虑这段代码:
static void Main(string[] args)
{
Console.WriteLine(Marshal.SizeOf(typeof(bool)));
Console.WriteLine(String.Join(", ", BitConverter.GetBytes(true)));
}
Run Code Online (Sandbox Code Playgroud)
如果bool是1个字节,我希望它输出
1
1
如果bool是4个字节(作为一个int),我期望
4
1,0,0,0 //让我们忘记字节序
但是,它输出(在x64中)
4
1
在封送代码中,这对我来说是个大问题。我应该信任谁?
两种测量a大小的方法bool都是有缺陷的。
Marshal.SizeOf用于确定将给定类型编组到非托管代码时占用了多少内存。A bool被编组BOOL为4个字节的Windows 类型。
BitConverter.GetBytes(bool) 这样有效地实现:
public static byte[] GetBytes(bool value) {
byte[] r = new byte[1];
r[0] = (value ? (byte)1 : (byte)0 );
return r;
}
Run Code Online (Sandbox Code Playgroud)
来源。
因此,它总是返回一个单元素数组。
您可能想要的是sizeof(byte),它“返回给定类型的变量所占用的字节数”(MSDN)。sizeof(bool)返回1。
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |