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
{
    /// <summary>
    /// 整数值转为二进制数组
    /// </summary>
    /// <param name="resultSize">最终二进制数组的大小,默认32</param>
    /// <returns>byte数组</returns>
    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;
    }

    /// <summary>
    /// 二进制数组转整数
    /// </summary>
    /// <returns>整数值</returns>
    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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,003评论 2 89
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,195评论 0 13
  • 一 喜欢看韩剧,很少看言情的偶像剧,一般只看刑侦片,但是《没关系,是爱情啊!》这部剧是在评论区看到有人介绍说演员表...
    追风_f27e阅读 602评论 8 8
  • 阅读自控力的第八章,说是意志力会传染,但是我读到最后我却对自豪这件事情感了兴趣。 如果说自控力会传染,我相信。我今...
    灿灿_e560阅读 206评论 1 2