我有这个代码
BitConverter.GetBytes(width).CopyTo(resultBytes, 0);
如果宽度为 12,则返回一个字节而不是 4,是否有一个内置函数来调整数组的大小,在开头留下 0 以输出 [0, 0, 0, 12] 而不是 [12]。
我有这个代码
BitConverter.GetBytes(width).CopyTo(resultBytes, 0);
如果宽度为 12,则返回一个字节而不是 4,是否有一个内置函数来调整数组的大小,在开头留下 0 以输出 [0, 0, 0, 12] 而不是 [12]。
是什么类型的width
?位转换器只是将类型转换为适当大小的数组。如果你说
long x = 1 ;
int y = 2 ;
short z = 3 ;
byte[] x_bytes = BitConverter.GetBytes(x) ;
byte[] y_bytes = BitConverter.GetBytes(y) ;
byte[] z_bytes = BitConverter.GetBytes(z) ;
您将分别返回 8、4 和 2 字节数组。您可以转换为所需的类型:
byte[] bytes = BitConverter.GetBytes( (int) x ) ;
如果你说类似
byte[] bytes = BitConverter.GetBytes(1) ;
你会得到一个 4 字节的数组:无后缀整数文字的类型是最小的类型,按优先顺序排列:int
, uint
, long
, ulong
. 如果文字有后缀,它将是后缀指定的类型(例如,1L
会给你一个 8-byte long
)。
如果您正在转换一个表达式,例如:
byte[] bytes = BitConverter.GetBytes( ((3*x + 2&y + z) << 3 ) & 5L ) ;
当然,被转换的是通过评估表达式产生的类型。
您需要转换width
为int
以获得 4 个字节,因为结果GetBytes()
取决于传入的类型:
BitConverter.GetBytes((int)width).CopyTo(resultBytes, 0);
也许这是有史以来最简单的解决方案,但是Array.Reverse
:
BitConverter.GetBytes(4).CopyTo(resultBytes, 0); // [4, 0, 0, 0]
Array.Reverse(resultBytes); // [0, 0, 0, 4]