C# 将 int 转换为 2 个字节的数组

C# Converting an int into an array of 2 bytes

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

您需要移动第一个字节:

 //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 returns 只需要字节。如果该值很小(低于 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 提供的高级 类 而不是低级,并且使用按位运算符我认为这是一个不错的选择。