字节= 8位,但为什么BitConverter不这么认为

时间:2010-04-09 02:39:55

标签: .net vb.net

鉴于以下信息

Public Enum Request As Byte
    None = 0
    Identity = 1
    License = 2
End Enum

Protected mType As Communication.Request

mType = Communication.Request.Identity

Debug.Print (BitConverter.GetBytes(mType).Length.tostring)

2

为什么bitconverter报告mType是2的长度。我原以为将Byte传递给BitConverter.GetBytes只会返回字节。

我的意思是没什么大不了的,因为它只是在TCP Socket上发送了一小块数据,但我很感兴趣为什么它认为它是2个字节。

1 个答案:

答案 0 :(得分:6)

因为BitConverter.GetBytes(字节b)没有过载(参见msdn),所以使用最近的可用隐式重载,在这种情况下,返回一个字节[2]。

使用简单的代码:

        byte b = 1;
        BitConverter.GetBytes(b);

编译它并使用ildasm,我们看到调用int16(这是一个简短的)的方法:

.method public hidebysig instance void  bytetest() cil managed
{
  // Code size       11 (0xb)
  .maxstack  1
  .locals init ([0] uint8 b)
  IL_0000:  nop
  IL_0001:  ldc.i4.1
  IL_0002:  stloc.0
  IL_0003:  ldloc.0
  IL_0004:  call       uint8[] [mscorlib]System.BitConverter::GetBytes(int16)
  IL_0009:  pop
  IL_000a:  ret
} // end of method Test::bytetest

在Visual Studio中悬停方法时也可以看到(选定的重载显示在工具提示中)