我有这段代码
BitConverter.GetBytes(width).CopyTo(resultBytes, 0);
如果宽度为12,则返回一个字节而不是4,是否有内置函数来调整数组的大小,在开头留下0 输出[0,0,0,12]而不是[12]。
答案 0 :(得分:2)
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
,{ {1}},long
。如果文字是后缀,则它将是后缀指定的类型(例如,ulong
将为您提供8字节1L
)。
如果要转换表达式,例如:
long
转换的内容当然是通过评估表达式产生的类型。
答案 1 :(得分:1)
您需要将width
投射到int
以获得4个字节,因为GetBytes()
is dependent on the type passed in的结果:
BitConverter.GetBytes((int)width).CopyTo(resultBytes, 0);
答案 2 :(得分:0)
也许这是最简单的解决方案,但是Array.Reverse
:
BitConverter.GetBytes(4).CopyTo(resultBytes, 0); // [4, 0, 0, 0]
Array.Reverse(resultBytes); // [0, 0, 0, 4]