如果我的问题不够明确,我提前道歉,我没有很多c#的经验,我遇到了一个奇怪的问题。 我试图将一个int转换为两个字节的数组(例如:取2210并获取:0x08,0xA2),但我得到的只是:0x00,0xA2,我无法弄清楚为什么。非常感谢任何建议。 (我已尝试阅读有关此事的其他问题,但找不到有用的答案)
我的代码:
profile_number = GetProfileName(); // it gets the int
profile_num[0] = (byte) ((profile_number & 0xFF00));
profile_num[1] = (byte) ((profile_number & 0x00FF));
profile_checksum = CalcProfileChecksum();
//注意:我指的是一个2字节的数组,所以关于4字节数组的问题的答案对我没有帮助。
答案 0 :(得分:6)
你需要移动第一个字节:
//profile_num[0] = (byte) ((profile_number & 0xFF00));
profile_num[0] = (byte) ((profile_number & 0xFF00) >> 8);
profile_num[1] = (byte) ((profile_number & 0x00FF));
答案 1 :(得分:0)
首先我认为这是最简单的方法:
public static byte[] IntToByteArray(int value)
{
return (new BigInteger(value)).ToByteArray();
}
但我意识到ToByteArray只返回所需的字节。如果值很小(低于256),则返回单个字节。我注意到的另一件事是返回的数组中的值被反转,以便在左边找到右边的字节(最无意义的字节)。所以我进行了一些修改:
public static byte[] IntToByteArrayUsingBigInteger(int value, int numberOfBytes)
{
var res = (new BigInteger(value)).ToByteArray().Reverse().ToArray();
if (res.Length == numberOfBytes)
return res;
byte[] result = new byte[numberOfBytes];
if (res.Length > numberOfBytes)
Array.Copy(res, res.Length - numberOfBytes, result, 0, numberOfBytes);
else
Array.Copy(res, 0, result, numberOfBytes - res.Length, res.Length);
return result;
}
我知道这不会与按位操作的性能相比,但为了学习新东西,如果你首先使用.NET提供的高级类而不是低级别并使用按位运算符我认为& #39;一个不错的选择。