c#将int型转换为2字节数组

本文关键字:字节 字节数 数组 转换 int | 更新日期: 2023-09-27 18:05:24

如果我的问题不够清楚,我提前道歉,我没有太多的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字节数组的问题的答案对我没有帮助。

c#将int型转换为2字节数组

你需要移动第一个字节:

 //profile_num[0] = (byte) ((profile_number & 0xFF00));
 profile_num[0] = (byte) ((profile_number & 0xFF00) >> 8);
 profile_num[1] = (byte) ((profile_number & 0x00FF));

首先我认为这是最简单的方法:

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提供的高级类,而不是低级和使用按位操作符,我认为这是一个很好的选择。