- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace ConsoleApplication2
- {
- public static class HexConversion
- {
- private static string ThreeSix = "ABCDEFGHIJKLMNOPQISTUVWXYZ";
- #region 二进制转化
- /// <summary>
- /// 二进制到十进制
- /// </summary>
- /// <param name="num"></param>
- /// <returns></returns>
- public static long TwoToTen(string num)
- {
- return ConverHexToTen(num, 2);
- }
- /// <summary>
- /// 二进制到32进制
- /// </summary>
- /// <param name="number"></param>
- /// <returns></returns>
- public static string TwoTo32(string number)
- {
- string[] str = GetByte(number, 5);
- StringBuilder num = new StringBuilder();
- foreach (string s in str)
- {
- long six = TwoToTen(s);
- }
- return null;
- }
- #endregion
- #region 八进制转化
- public static long EightToTen(string number)
- {
- return ConverHexToTen(number, 8);
- }
- #endregion
- #region 十进制转化
- /// <summary>
- /// 十进制到二进制
- /// </summary>
- /// <param name="number"></param>
- /// <returns></returns>
- public static string TenToTwo(long number)
- {
- return ConverHex(number, 2);
- }
- /// <summary>
- /// 十进制到八进制
- /// </summary>
- /// <param name="number"></param>
- /// <returns></returns>
- public static string TenToEight(long number)
- {
- return ConverHex(number, 8);
- }
- /// <summary>
- /// 十进制到16进制
- /// </summary>
- /// <param name="number"></param>
- /// <returns></returns>
- public static string TenToSixteen(long number)
- {
- return ConverHex(number, 16);
- }
- /// <summary>
- /// 十进制到32进制
- /// </summary>
- /// <param name="number"></param>
- /// <returns></returns>
- public static string TenTo32(long number)
- {
- return ConverHex(number, 32);
- }
- #endregion
- #region 16进制转化
- public static long SixteenToTen(string number)
- {
- return ConverHexToTen(number, 16);
- }
- #endregion
- #region 32进制转化
- public static long SixToTen(string number)
- {
- return ConverHexToTen(number, 32);
- }
- #endregion
- #region 公用方法
- /// <summary>
- /// 获取相应的字符,16进制与32进制需要使用
- /// </summary>
- /// <param name="num"></param>
- /// <returns></returns>
- private static string SixFont(long num)
- {
- if (num < 10)
- return num + "";
- return ThreeSix.Substring((int)num - 10, 1);
- }
- /// <summary>
- /// 获取相应bit的数量,便于转化
- /// </summary>
- /// <param name="str"></param>
- /// <param name="size"></param>
- /// <returns></returns>
- private static string[] GetByte(string str, int size)
- {
- int lenght = str.Length % size;
- if (lenght > 0)
- str.PadLeft((str.Length / size + 1) * size, '0');
- string[] strs = new string[str.Length / size];
- for (int i = 0; i < str.Length / size; i++)
- {
- strs[i] = str.Substring(i * size, (i + 1) * size);
- }
- return strs;
- }
- /// <summary>
- /// 10进制转化成其他进制
- /// </summary>
- /// <param name="number">需转换字符</param>
- /// <param name="format">转化到;如转换到2进制,这里键入2</param>
- /// <returns></returns>
- public static string ConverHex(long number, int format)
- {
- if (number == 0)
- return number + "";
- StringBuilder str = new StringBuilder();
- while (number > 0)
- {
- str.Insert(0, SixFont((number % format)));
- number /= format;
- }
- return str.ToString();
- }
- /// <summary>
- /// 其他进制转化到10进制
- /// </summary>
- /// <param name="num">需转换字符</param>
- /// <param name="format">转化到;如转换到2进制,这里键入2</param>
- /// <returns></returns>
- public static long ConverHexToTen(string num, int format)
- {
- long allCount = 0;
- for (int i = 0; i < num.Length; i++)
- {
- string s = num.Substring(i, 1);
- int n = 0;
- if (!int.TryParse(s, out n)) {
- n= GetNumberByStr(s);
- }
- if (n < 0)
- throw new Exception("输入字符有误,请确保该字符真实存在");
- if (n > 0)
- {
- long count = 1;
- for (int j = 0; j < num.Length - i - 1; j++)
- {
- count *= format;
- }
- count *= n;
- allCount += count;
- }
- }
- return allCount;
- }
- /// <summary>
- /// 根据字符,获取对应的十进制数据
- /// </summary>
- /// <param name="c"></param>
- /// <returns></returns>
- private static Int32 GetNumberByStr(string c)
- {
- int i = ThreeSix.IndexOf(c);
- if (i < 0)
- return i;
- return i + 10;
- }
- #endregion
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/1811201514028.html
来源: http://www.codesnippet.cn/detail/1811201514028.html