C#,int值与二进制数组互转

重点方法

Convert.ToString()/Convert.ToInt()

Convert.ToString(12,2); // 将12转为2进制字符串,结果 “1100”
Convert.ToInt("1100",2); // 将2进制字符串转为整数,结果 12

实践

可以写成扩展方法如下:

using System;
using System.Linq;

static class IntegerAndBinaryConverter
{
    /// 
    /// 整数值转为二进制数组
    /// 
    /// 最终二进制数组的大小,默认32
    /// byte数组
    public static byte[] ToBinaryBits(this int integer, int resultSize = 32)
    {
        var result = new byte[resultSize];

        var binaryString = Convert.ToString(integer, 2);
        // 先把string转成char数组,再将char数组中每一个值转为byte(需要减去char类型0的值,即48)。
        var binaryBits = binaryString.ToCharArray().Select(i => (byte)(i - 48)).ToArray(); 
        var binarySize = binaryBits.Length;

        if (binarySize > resultSize)
        {
            throw new ArgumentException("设置的结果数组容量不足。");
        }

        Array.Copy(binaryBits, 0, result, resultSize - binaryBits.Length, binaryBits.Length);
        return result;
    }

    /// 
    /// 二进制数组转整数
    /// 
    /// 整数值
    public static int FromBinaryToInt(this byte[] binaryBits)
    {
        if (binaryBits.Any(i => i != 0 && i != 1)) // 如果该数组包含有0/1之外的值,则抛出异常
        {
            throw new ArgumentException("若要使用该方法,byte数组必须只包含0或1。");
        }
        return Convert.ToInt32(string.Join("", binaryBits), 2); 
    }
}

使用举例:

var binaryBits=12.ToBinaryBits(8); // [0,0,0,0,1,1,0,0]
var integer=binaryBits.FromBinaryToInt(); // 12

你可能感兴趣的:(C#,int值与二进制数组互转)