这是为什么呢?唉!我的八进制是这样的,
 public static int BaToShi(string data)
        {
            int s;
            int sum = 0;
            int p = 1;
            for (int i = data.Length - 1; i >= 0; i--)
            {
                s = Convert.ToInt16(data[i]);
                s = s * p;
                p = p * 8;
                sum = sum + s;
            }
            return sum;
       }
我的16进制还是这样的,怎么就不对了???求解释啊。
 public static int  ShiLiuToShi(string data)
        {
            char c;
            int  s;
            int  sum = 0;
            int p = 1;
            for (int i = data.Length - 1; i >= 0; i--)
            {
                c=data[i];
                switch (c)
                {
                    case 'A': s = 10; break;
                    case 'B': s = 11; break;
                    case 'C': s = 12; break;
                    case 'D': s = 13; break;
                    case 'E': s = 14; break;
                    case 'F': s = 15; break;
                    default: s = Convert.ToInt16(c); break;
                }
                s = s * p;
                p = p * 16;
                sum = sum + s;
            }
            return sum;
        }
在线等你们哦

解决方案 »

  1.   

      Convert.ToInt16(data[i]) 和 Convert.ToInt16(c) ,字符转short,'1'不是转得1,而是49,所以这要改成 Convert.ToInt16(data.Substring(i,1))
      

  2.   

     /// <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;
            }