如何将int转换为大小为3的字节数组?

时间:2016-10-06 09:59:47

标签: c#

我需要将int转换为大小为3的字节数组。这意味着删除最后一个字节,例如:

var temp = BitConverter.GetBytes(myNum).Take(3).ToArray());

然而,有更好的方法吗?也许通过创建自定义结构?

修改

对于此要求,我为此新数据类型预定义了最大值16777215。

2 个答案:

答案 0 :(得分:2)

像这样(没有 Linq ,只是获取字节)

  int value = 123;

  byte[] result = new byte[] {
    (byte) (value & 0xFF),
    (byte) ((value >> 8) & 0xFF),
    (byte) ((value >> 16) & 0xFF),
  };

答案 1 :(得分:1)

听起来你想要创建一个代表3字节无符号整数的新struct(仅基于引用的最大值)。

使用原始方法非常容易失败,首先,Take(3)取决于您运行的系统是big-endian还是little-endian,其次,它没有考虑到什么当您通过新int无法处理的否定struct时会发生。

你需要自己编写转换,我会按照int给出,检查它是否为负数,检查它是否大于16777215,如果它通过了那些检查,则它在0到16777215之间并且你可以将其存储在新的struct中,只需执行Where(b => b != 0)而不是Take(3)来解决字符串问题。显然要考虑所有字节= 0的情况。