将int转换为不同大小的字节数组

问题描述:

我有一个字节数组result。我想将我的类型称为Info这些都是int到字节数组,但它们都是不同的大小。将int转换为不同大小的字节数组

一个= 4个字节

B = 3字节

C = 2字节

d = 1个字节

这是我试过的代码。

private byte[] getInfoByteArray(Info data) 
{ 
    byte[] result = new byte[10]; 
    BitConverter.GetBytes((data.a)).CopyTo(result, 0); 
    BitConverter.GetBytes((data.b)).CopyTo(result, 4); 
    BitConverter.GetBytes((data.c)).CopyTo(result, 7); 
    result [9] = Convert.ToByte(data.d); 

    return result; 
    } 

但是,我发现BitConverter.GetBytes返回4个字节。

是否有任何通用解决方案可以将不同大小的字节传递给字节数组?

+0

“int”始终存储为4个字节。 'GetBytes()'并不总是只返回长度为4的字节数组,它只是这样做的,因为你使用的是'int'数据类型。您可以使用[此答案](http://*.com/a/11651620/74757)来计算保存您的整数值所需的最小字节数(可能会返回列出的4,3,2和1大小),然后在复制到最终的字节数组之前将'.GetBytes()'的结果修剪到该长度。 –

+1

不清楚为什么你需要字段的不同字节长度,特别是如果它们全都是“int”类型的话。如果你确定你真的只需要3,2或1个字节的b,c和d,那么c和d就可以是“short”和“byte”,给你你需要的东西。您对b的结果取决于字节顺序,但可以截断该数组,例如'Array.Copy(BitConverter.GetBytes(data.b),0,result,4,3)'。即如果你不想要所有的字节,那么**不要复制所有的字节**。 –

使用Array.Copy(Array, Int32, Array, Int32, Int32)方法:

byte[] result = new byte[10]; 
Array.Copy(BitConverter.GetBytes(data.a), 0, result, 0, 4); 
Array.Copy(BitConverter.GetBytes(data.b), 0, result, 4, 3); 
Array.Copy(BitConverter.GetBytes(data.c), 0, result, 7, 2); 
Array.Copy(BitConverter.GetBytes(data.d), 0, result, 9, 1); 

这是假定小端的硬件。如果您的硬件是big endian,请使用

byte[] result = new byte[10]; 
Array.Copy(BitConverter.GetBytes(data.a), 0, result, 0, 4); 
Array.Copy(BitConverter.GetBytes(data.b), 1, result, 4, 3); 
Array.Copy(BitConverter.GetBytes(data.c), 2, result, 7, 2); 
Array.Copy(BitConverter.GetBytes(data.d), 3, result, 9, 1);