C#进制转换

原文链接: http://www.cnblogs.com/zhanghonjiang2011/archive/2012/07/02/2573882.html

上篇文章学习了微博短URL地址的原理,但还残留了两个问题 :进制转换和位运算   所以这篇文章解决进制转换的问题.

/////////////以下内容来源于网络////////////////////

二进制 转十进制

(1)二进制转十进制 

  方法:“按权展开求和” 

  例: (1011.01)2 =(1×2^3+0×2^2+1×2^1+1×2^0+0×2^(-1)+1×2^(-2) )10 

  =(8+0+2+1+0+0.25)10 

  =(11.25)10 

  规律:个位上的数字的次数是0,十位上的数字的次数是1,......,依次递增,而十分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。

(2)十进制转二进制

 十进制整数转二进制数:“除以2取余,逆序排列”(除二取余法) 

  例: (89)10 =(1011001)2

  89÷2 ……1

  44÷2 ……0

  22÷2 ……0 

  11÷2 ……1 

  5÷2 ……1 

  2÷2 ……0 

  1 

  · 十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法)

//八进制转十进制

//知识普及:八进制逢八进一,基数为八,基本符号:0、1、2、3、4、5、6、7。位权8∧i。表示符号:O

例:将八进制数12.6转换成十进制数 

  (12.6)8 = 1×8^1 + 2×8^0 + 6×8^-1 = (10.75)10

//十进制转八进制

  方法1:采用除8取余法。 

  例:将十进制数115转化为八进制数

  8| 115…… 3 

  8| 14 …… 6

  8| 1 …… 1 

  结果:(115)10 = (163)8

//十六进制转十进

知识普及:它由0-9,A-F,组成。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0---(N-1)的数表示超过9的用字母A-F。

十进制转十六进制

  采余数定理分解,例如将487710转成十六进制:

     487710÷16=30481....14(e) 

  30481÷16=1905....1 

  1905÷16=119....1 

  119÷16=7....7 

  7÷16=0....7 

  这样就计到487710=7711E

    十六进制转十进制与二,八进制转十进制同理。

////////////以上内容来源于网络////////////////

  不管是二进制,八进制,十六进制转十进制都是根据 位置数上的值*自身进制的位置数的次方

   十进制转二,八,十六进制为 采用除[进制]取余法

   根据结论,写出方法如下的代码:

  

/// <summary>
        /// 十进制数转换成二、八、十六进制数
        /// </summary>
        /// <param name="int_value">十进制数</param>
        /// <param name="mod">进制</param>
        /// <returns></returns>
        public static string IntToHex(int int_value, int mod)
        {
            string hex_value = string.Empty;
            int add_value, mod_value, temp;
            char char_mod_value;
            temp = int_value;
            while (temp > 0)
            {
                add_value = temp / mod;
                mod_value = temp % mod;
                if (mod_value >= 10)
                {
                    char_mod_value = (char)(mod_value + 55);
                }
                else
                {
                    char_mod_value = (char)(mod_value + 48);
                }
                hex_value = char_mod_value + hex_value;
                temp = add_value;
            }
            return hex_value; 
}

  

 /// <summary>
        /// 非十进制数转换成十进制
        /// </summary>
        /// <param name="hex_value">非十进制数</param>
        /// <param name="mod">模</param>
        /// <returns>十进制数</returns>
        public static int HexToInt(string hex_value, int mod)
        {
            int value = 0;
            for (int i = 0; i < hex_value.Length; i++)
            {
                int asc = Convert.ToInt32(hex_value[i]);
                if (asc >= 65)
                {
                    value = value + Convert.ToInt32((asc - 55) * System.Math.Pow(Convert.ToDouble(mod), Convert.ToDouble(hex_value.Length - i - 1)));
                }
                else
                {
                    value = value + Convert.ToInt32((asc - 48) * System.Math.Pow(Convert.ToDouble(mod), Convert.ToDouble(hex_value.Length - i - 1)));
                }
            }
            return value;
        }

  


实际上在C#中还有更简单的方法:

Convert.ToString(int value,int toBase); 十进制转二,八,十六进制 如:

Convert.ToString(123,2);

Convert.ToString(123,8);

Convert.ToString(123,16);

相反则

Convert.ToInt32("10101010110100001",10);

Convert.ToInt32("127623365634",10);

Convert.ToInt32("23E46D76810AB",10);

本来有进制中小数转换的 , 发现不通用就没上写。

转载于:https://www.cnblogs.com/zhanghonjiang2011/archive/2012/07/02/2573882.html

猜你喜欢

转载自blog.csdn.net/weixin_30814329/article/details/94800043