码迷,mamicode.com
首页 > 其他好文 > 详细

进制转换

时间:2016-07-21 06:13:33      阅读:792      评论:0      收藏:0      [点我收藏+]

标签:

为什么我们一般采用十六进制用来数据传输

     计算机的存储器(DRAM、SRAM、Flash、硬盘)和运算器全都基于二进制工作,所以本身的数据应该是二进制。但是,二进制表示数据太没效率,一个32位的整数就要写成0000 0000 0000 0000 0000 0000 0000 0011,不方便读写和记忆。十进制换算

比较麻烦,而且没有按位对应关系;二进制数是计算机语言,而十六进制  16是2的4次方,这样系统在转换数制时会更加快捷,十六进制正好四位二进制对应一位十六进制(比如:1110->E),于是一个整数表示成0x00000003方便多了,0x是固定表示十六进制的开头。

     基础:进制转换的算法

             十进制转二进制:用2辗转相除至结果为1,将余数和最后的1从下向上倒序写,就是结果。比如:352(十进制)—101100000(二进制)—540(八进制)—160(十六进制)—EG(二十四进制)—B0(三十二进制)—5W(进制)

              352 / 2 = 176 余 0

              176 / 2 = 88  余 0

              88 / 2  = 44 余 0

              44 / 2 = 22 余 0

              22 / 2 = 11 余 0

              11 / 2 = 5 余 1

              5  /  2 = 2 余 1

              2 / 2 = 1  余 0

              故二进制为101100000

          二进制转十进制: 

          从最后一位开始算,依次为0、1、2...位,第n位数(0或1)乘以2的n次方得到的结果相加就是答案。比如上面的二进制:101100000

          第0位:0 乘 2的0次方 = 0

                    0 乘 2的1次方 = 0

                    0 乘 2的2次方 = 0

                    0 乘 2的3次方 = 0

                    0 乘 2的4次方 = 0

                    1 乘 2的5次方 = 32

                    1 乘 2的5次方 = 64

                    0 乘 2的5次方 = 0

                    1 乘 2的5次方 = 256

                    然后:0+0+0+0+0+32+64+0+256 = 352,

                    结果:352

      

             二进制转八进制

             可以3位二进制编为一组(不够左侧补0),然后从右边开始没三位按如这种方式替换:000—0,001—1,010—2,011—3,100—4,101—5,110—6,111—7

             比如转换上面二进制101100000 那么分组为101-(5)  100-(4)  000-(0)

             那么结果为:540

             

           二进制转十六进制

            0000—0, 0001—1, 0010—2,0011—3

            0100—4, 0101—5, 0110—6,0111—7

            1000—8, 1001—9, 1010—A,1011—B

            1100—C, 1101—D,1110—E,1111—F

            此时分组为4位二进制数为一组,比如上面的二进制数据101100000,分组

            0001 0110 0000

               1       6      0

             所以结果为:160

 

            十六进制转换成十进制

            ABCDEF分别表示10 11 12 13 14 15,算法为:个位 + 十位乘以16 + 百位乘以16^2.....依次类推

            比如十六进制数据160: 0 + 6 * 16 + 1 * 16 ^ 2 =352。

            结果为:352

 

 

   进制转换的代码(C#)

     

/// <summary>
    /// C#进制转换(二进制数在C#中无法直接表示,所有二进制都用一个字符串表示)  例如:二进制:1010表示字符串“1010”
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            int num = 10;

            //十进制转换为二进制字符串,//输出:1010
            Console.WriteLine(Convert.ToString(num, 2));

            //十进制转化为十六进制字符串,输出A
            Console.WriteLine(Convert.ToString(num,16));

            //二进制字符转换为十进制数,输出10
            string bin = "1010";

            Console.WriteLine(Convert.ToInt32(bin, 2));



            //二进制数据字符串转化为16进制,输出A
            string bin2 = "1010";

            Console.WriteLine(string.Format("{0:x}", Convert.ToInt32(bin2, 2)));



            //十六进制转二进制字符串,输出1010
            Console.WriteLine(Convert.ToString(0xa, 2));



            //十六进制转十进制,输出10
            Console.WriteLine(Convert.ToString(0xa, 10));



            string s1 = StrToHex("我爱你,宝宝");

            string s2 = HexToStr(s1);

            string s3 = HexToASCII("1231231231231");

            Console.WriteLine(s1);

            Console.WriteLine(s2);

            Console.WriteLine(s3);

            Console.ReadLine();
        }



        //HEX编码转换为——>ASCII编码
        public static string HexToASCII(string Msg)
        {
            byte[] buff = new byte[Msg.Length / 2];

            string Message = "";

            for (int i = 0; i < buff.Length; i++)
            {
                buff[i] = byte.Parse(Msg.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber);
            }

            System.Text.Encoding chs = System.Text.Encoding.ASCII;

            Message = chs.GetString(buff);

            return Message;
        }


        //HEX编码转换为——>字符串
        public static string HexToStr(string Msg)
        {
            byte[] buff = new byte[Msg.Length / 2];

            string Message = "";

            for (int i = 0; i < buff.Length; i++)
            {
                buff[i] = byte.Parse(Msg.Substring(i * 2, 2),System.Globalization.NumberStyles.HexNumber);            
            }

            System.Text.Encoding chs = System.Text.Encoding.GetEncoding("gb2312");

            Message = chs.GetString(buff);

            return Message;
        }


        //字符串转化为——>HEX编码
        public static string StrToHex(string Msg)
        {
            byte[] bytes = System.Text.Encoding.Default.GetBytes(Msg);//转换为字节(十进制)

            string str = "";

            for (int i = 0; i < bytes.Length; i++)
            {
                str += string.Format("{0:X}", bytes[i]);               //转换为十六进制
            }

            return str;
        }
    }

  

 

    

进制转换

标签:

原文地址:http://www.cnblogs.com/shikangjie/p/5690194.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!