【发布时间】:2016-09-07 02:17:21
【问题描述】:
我有一个字节数组result。我想将我的名为Info 的类型全部转换为int 到字节数组,但它们的大小都不同。
a = 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 个字节。
是否有任何通用解决方案可以将不同大小的字节转换为字节数组?
【问题讨论】:
-
int始终存储为 4 个字节。GetBytes()并不总是只返回 4 长的字节数组,它这样做只是因为您使用的是int数据类型。您可以使用this answer 计算保存整数值所需的最小字节数(假定返回列出的 4、3、2 和 1 大小),然后在复制到之前将.GetBytes()的结果修剪到该长度你的最终字节数组。 -
不清楚为什么要为字段设置不同的字节长度,尤其是当它们实际上都是
int类型时。如果您确定 b、c 和 d 确实只需要 3、2 或 1 个字节,那么 c 和 d 可以是short和byte,这正是您所需要的。您对 b 的结果取决于字节顺序,但您可以截断数组,例如Array.Copy(BitConverter.GetBytes(data.b), 0, result, 4, 3)。 IE。如果您不想要所有字节,则不要复制所有字节。