0

我有这个代码

BitConverter.GetBytes(width).CopyTo(resultBytes, 0);

如果宽度为 12,则返回一个字节而不是 4,是否有一个内置函数来调整数组的大小,在开头留下 0 以输出 [0, 0, 0, 12] 而不是 [12]。

4

3 回答 3

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, long, ulong. 如果文字有后缀,它将是后缀指定的类型(例如,1L会给你一个 8-byte long)。

如果您正在转换一个表达式,例如:

byte[] bytes = BitConverter.GetBytes( ((3*x + 2&y + z) << 3 ) & 5L ) ;

当然,被转换的是通过评估表达式产生的类型。

于 2015-07-23T18:44:05.627 回答
1

您需要转换widthint以获得 4 个字节,因为结果GetBytes() 取决于传入的类型

    BitConverter.GetBytes((int)width).CopyTo(resultBytes, 0);
于 2015-07-23T18:33:49.163 回答
0

也许这是有史以来最简单的解决方案,但是Array.Reverse

BitConverter.GetBytes(4).CopyTo(resultBytes, 0); // [4, 0, 0, 0]
Array.Reverse(resultBytes); // [0, 0, 0, 4]
于 2015-07-23T18:41:06.810 回答