C# 二进制,十进制,十六进制 互转

一. 十进制转换二、八、十六进制

///要转换的 32 位带符号整数。
///返回值的基数,必须是 2、8、10 或 16

//十进制转二

Console.WriteLine(Convert.ToString(69, 2));

//十进制转八进制

Console.WriteLine(Convert.ToString(69, 8));

//十进制转十六进制

Console.WriteLine(Convert.ToString(69, 16));


二. 2、8、16进制字符串转十进制

/// <summary>
/// 将指定基数的数字的字符串表示形式转换为等效的 32 位有符号整数
/// </summary>
/// <param name="value">包含要转换的数字的字符串</param>
/// <param name="fromBase">value 中数字的基数,它必须是 2、8、10 或 16</param>
/// <returns>与 value 中数字等效的 32 位带符号整数,如果 value 为 null,则为 0(零)。</returns>
Convert.ToInt32(string value, int fromBase)
Convert.ToUInt64(string value, int fromBase))

//二进制转十进制

Console.WriteLine(Convert.ToInt32(″100111101″, 2));

//八进制转十进制

Console.WriteLine(Convert.ToInt32(″76″, 8));

//十六进制转十进制

Console.WriteLine(Convert.ToInt32(″FF″, 16));


三、十进制转任意进制

/// <summary>
/// 将十进制转换为指定的进制
/// </summary>
/// <param name="Val">十进制值</param>
/// <param name="TargetRadix">目标进制</param>
/// <param name="BaseChar">基数列表(长度必须大于源字符串进制,无I,O)</param>
/// <returns></returns>
public static string JinZhiConvert(ulong Val, int TargetRadix = 0, string BaseChar = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ")
{
      if (TargetRadix == 0 && BaseChar.Length == 0) return "长度与基数不能同时为零";
      if (TargetRadix <= 0) TargetRadix = BaseChar.Length;
      List<string> r = new List<string>();
      do{
          ulong y = Val % (ulong)TargetRadix;
          r.Add(BaseChar[Convert.ToInt32(y)].ToString());
          Val = Convert.ToUInt64(Math.Floor(Val / (decimal)TargetRadix));
      } while (Val > 0);
      r.Reverse();
      return string.Join("", r.ToArray());
}


/// <summary>
/// 将任意进制转化为十制
/// </summary>
/// <param name="Val">任意进制的字任串</param>
/// <param name="SourceRadix">源字符串的进制</param>
/// <param name="BaseChar">基数列表(长度必须大于源字符串进制,无I,O)</param>
/// <returns></returns>
public static ulong JinZhiConvert(string Val, int SourceRadix = 0, string BaseChar = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ")
{
     ulong r = 0;
     if (BaseChar == "") return 0;
     if (SourceRadix == 0) SourceRadix = BaseChar.Length;
     List<char> v = Val.ToCharArray().ToList();
     v.Reverse();
     for (int i = 0; i < v.Count; i++)
     {
        int index = BaseChar.IndexOf(v[i]);
        if (index > -1)
          r += Convert.ToUInt64(index * Math.Pow(SourceRadix, i));
     }
     return r;
}


本站数据来源于互联网,仅供个人学习交流,如有侵权,请联系我们进行删除

Copyright © 2020 - 2021 WXXBEST 蜀ICP备18009175号-1