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

Posted

技术标签:

【中文标题】C# 将 int 转换为 2 个字节的数组【英文标题】:C# Converting an int into an array of 2 bytes 【发布时间】:2015-07-30 06:37:22 【问题描述】:

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

【问题讨论】:

int 的大小为 4 个字节。 C# int to byte[]的可能重复 您希望总是得到一个两个字节的数组? 是的,我正在构建一条消息,该消息正在发送到需要 2 字节数组的硬件。 【参考方案1】:

你需要移动第一个字节:

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

【讨论】:

总是更好地说明为什么示例代码不起作用,而不仅仅是“这是一种不同的方法”:) 最初我尝试了“>> 16”但没有成功,但您的解决方案有效,谢谢! 这是针对 Int16 我假设不是具有 4 个字节的 Int32 @GeorgeLica - 它适用于任何 int 但只使用低 2 个字节。【参考方案2】:

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

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 提供的高级类而不是低级并使用按位运算符,我认为它是一个不错的选择。

【讨论】:

查看建议副本的链接,System.Convert 是较短的路径。 首先,非常感谢您的回答,但它不会给我一个 4 字节的数组吗? 我更改了我的代码,以便您可以调用我的 BigInteger 版本,以便它为您获取所需的任何字节数

以上是关于C# 将 int 转换为 2 个字节的数组的主要内容,如果未能解决你的问题,请参考以下文章

将字节数组转换为 int

(61)C#里怎么样转换字节数组与int类型

(61)C#里怎么样转换字节数组与int类型

C# 将 ReadOnlyCollection<int> 转换为 byte[] 数组

在c#中对字节数组表示的Int32求和

将2个整数转换为十六进制/字节数组?