我需要将int转换为大小为3的字节数组。这意味着删除最后一个字节,例如:
var temp = BitConverter.GetBytes(myNum).Take(3).ToArray());
然而,有更好的方法吗?也许通过创建自定义结构?
修改
对于此要求,我为此新数据类型预定义了最大值16777215。
答案 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的情况。