不需要固定长度、零填充字节数组的 BitConverter 的替代品?



BitConverter.GetBytes总是为数字返回固定长度的数组,用零填充,使它们精确地为1、2、4或8字节长。类似地,解码方法只接受特定长度的数组,这取决于数字的大小。

我更希望GetBytes返回未添加的数组,并且解码方法接受未添加的阵列,这样我就不必总是自己进行填充和修剪。例如:

  • 我希望GetBytes(100000)返回{ 0x01, 0x86, 0xa0 }而不是{ 0x00, 0x01, 0x86, 0xa0 }
  • 我想把{ 0x01, 0x86, 0xa0 }传给ToInt32,而不是{ 0x00, 0x01, 0x86, 0xa0 }

我是否缺少BitConverter的一些静态属性或不同方法,或者其他类或第三方库,这些属性或方法可以在不需要自己填充和修剪的情况下提供我想要的东西?

您可以为此编写自己的GetBytes()ToInt32()实现。

public byte[] GetBytesVariableLengthArray(uint number) 
{
return switch number
{
< 256 => new byte[] { i & 0xFF },
< 65536 => new byte[] { i & 0xFF, (i >> 8) & 0xFF },
< 65536 * 256 => new byte[] { /* ... and it goes on ... */ }
< 65536 * 65536 => new byte[] { /* ... and on ... */ }
};
}

类似ToInt32():

public uint ToInt32FromVariableLengthArray(byte[] bytes) 
{
uint result = 0;
switch (bytes.Length) 
{
case 4:
result = bytes[3] << 24;
goto case 3;
case 3:
result |= bytes[2] << 16;
goto case 2;
case 2:  
result |= bytes[1] << 8;
goto case 1;
case 1:
result |= bytes[0];
break;
}
return result;
}

最新更新