C# 中十进制与二进制、十六进制、八进制转换详解


本文摘自PHP中文网,作者零下一度,侵删。

1.十进制 转 二进制

将十进制数不断地除2,将所有余数倒叙填写,即可得到所需二进制数据。

1

2

3

4

5

6

7

8

9

10

11

12

public static string DecimalToBinary(int vDecimal)

{/* 将十进制的数 vDecimal 不断地除 2,取余数

     * 然后将余数 倒序 填写             */List<int> vYuShu = new List<int>();  // 除 2 过程中产生的余数集int vTempValue= vDecimal;            // 除 2 过程中产生的商数for (; ; )

    {int tempYS = vTempValue % 2;

        vYuShu.Add(tempYS);  // 记住余数vTempValue = vTempValue / 2;if (vTempValue == 0)  // 商数等于0时,结束运算break;

    }// 倒序输出string strBinary = "";for (int i = vYuShu.Count - 1; i >= 0; i--)

    {

        strBinary += vYuShu[i];

    }

 

    Console.WriteLine("Input decimal value:{0}, output binary value:{1}.", vDecimal, strBinary);return strBinary;

}

2. 二进制 转 十进制

将二进制各位上的值(0或1)乘2的(n-1)次方,将每位结果相加。其中,n表示二进制中从右向左的位数(从1开始计);

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

public static int BinaryToDecimal(string vBinary)

{// 首先判断是否满足输入要求int[] vInput = new int[vBinary.Length];for (int i = 0; i < vBinary.Length; i++)

    {var tempNum = vBinary[i].ToString();if (tempNum == "0")

        {

            vInput[i] = 0;

        }else if (tempNum == "1")

        {

            vInput[i] = 1;

        }else{throw new Exception("输入参数不正确,二进制数应仅由:0和1组成");

        }

    }/*

     * 依次乘2的(n-1)次方,再求和             */int vDecimal = 0;for (int i = 1; i <= vInput.Length; i++)

    {

        vDecimal += (int)(Math.Pow(2, i - 1) * vInput[vInput.Length-i]);

    }

 

    Console.WriteLine("Input binary value:{0}, output decimal value:{1}.", vBinary, vDecimal);return vDecimal;

}

3. 自带的转换方式

C#.Net自带的进制转换方式:

1

2

3

int vDecimal = 99;// 【10】 → 【2】string vBinary = Convert.ToString(vDecimal, 2);

Console.WriteLine("十进制数:{0},转换成二进制:{1}", vDecimal, vBinary);// 【2】 → 【10】int tempDecimal = Convert.ToInt32(vBinary, 2);

Console.WriteLine("二进制数:{0},转换成十进制:{1}", vBinary, tempDecimal);

4. 十进制 <=> 十六进制

1

2

3

int vDecimal = 127;// 【10】 → 【16】string vStrHex = "0x" + Convert.ToString(vDecimal, 16);

Console.WriteLine("十进制数:{0},转换成十六进制:{1}", vDecimal, vStrHex);// 【16】 → 【10】int tempDecimal = Convert.ToInt32(vStrHex, 16);

Console.WriteLine("十六进制数:{0},转换成十进制:{1}", vStrHex, tempDecimal);

或者可以:

5. 十进制 <=> 八进制

6. 其它转换

7. 有符号的数 二进制转换

对于有正负号的数据,在转换时与上诉略有不同。

1个字节(8个bits)它不管怎么样还是只能表示256个数,因为有符号所以我们就把它表示成范围:-128 → 127。

用最高位表示符号位,0表示正数,1表示负数。

10000000在计算机中表示最小的负整数。从10000001到 11111111依次表示-127到-1。

负整数在计算机中是以补码形式储存的。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

public static int BinaryToDecimalWithSign(string vBinary)

{// 首先判断是否满足输入要求int[] vInput = new int[vBinary.Length];for (int i = 0; i < vBinary.Length; i++)

    {var tempNum = vBinary[i].ToString();if (tempNum == "0")

        {

            vInput[i] = 0;

        }else if (tempNum == "1")

        {

            vInput[i] = 1;

        }else{throw new Exception("输入参数不正确,二进制数应仅由:0和1组成");

        }

    }// -------- 不足8bits,补足 --------(非必需)if (vInput.Length % 8 != 0) // 补足8b、16b、、、            {int nLen = (vInput.Length / 8 + 1) * 8;int[] nInput = new int[nLen];for (int i = 0; i < nLen - vInput.Length; i++)

        {

            nInput[i] = vInput[0];

        }

        vInput.CopyTo(nInput, nLen - vInput.Length);

 

        vInput = nInput;

    }// ---------------------------------// 第1步:首位为1,则为负值int vFH = vInput[0];if (vFH == 1)

    {// ---------- 第2步:减去一 ----------for (int i = 1; i <= vInput.Length; i++)

        {if (vInput[vInput.Length - i] == 1)

            {

                vInput[vInput.Length - i] = 0;break;

            }else{

                vInput[vInput.Length - i] = 1;

            }

        }// ---------- 第3步:取反 ----------for (int i = 0; i < vInput.Length; i++)

        {

            vInput[i] = 1 - vInput[i];

        }

    }// ---------- 第4步:转成10进制数 ----------int vDecimal = 0;for (int i = 1; i <= vInput.Length; i++)

    {

        vDecimal += (int)(Math.Pow(2, i - 1) * vInput[vInput.Length - i]);

    }if (vFH == 1) // 为负数            {

        vDecimal = 0 - vDecimal;

    }

 

    Console.WriteLine("Input binary value:{0}, output decimal value:{1}.", vBinary, vDecimal);return vDecimal;

}

[]

以上就是C# 中十进制与二进制、十六进制、八进制转换详解的详细内容!

相关阅读 >>

c#串口通信的实例教程

c#中关于静态与非静态方法的区别介绍

c#简单工厂模式是什么?

c#如何连接加密数据库(sqlite)的示例分享

关于.net(c#)正确读取中文编码文件的实例教程

总结.net mvc实现长轮询实例

.net core如何在新的项目系统中(.csproj)发布可执行文件

c#连接ftp时路径出现问题的解决方法

.net多线程编程中的误用点分析

新手学习.net编程计划-1

更多相关阅读请进入《csharp》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...