任意进制转换(转化器,算法,类)
2016-12-08 15:53
465 查看
介绍
此类库支持2(二进制)到36之间任意进制的转换。
类库提供了一些常见的转换(如二进制到十进制),也支持高级的转换(如20进制到5进制)
快速使用:内置转换器
Convert.BinToDec.Convert()
Convert.BinToHex.Convert()
Convert.BinToOct.Convert()
Convert.DecToBin.Convert()
Convert.DecToHex.Convert()
允许所有的转换组合使用二进制、八进制、十进制和十六进制。例如:
//将 FFF(hex)转化为二进制 string binary = Converter.HexToBin.Convert("FFFF");
高级功能:自定义转化器
除了内置的静态转换器,您还可以自定义转换。例如:
// 将 FFFF (hex) 转化为5: string base5 = Converter.Convert(NumberBases.Hexadecimal, 5, "FFFF");
主要代码:
/// <summary> /// 常见的进制转换 /// </summary> public enum NumberBases { Binary = 2,//二进制 Octal = 8,//八进制 Decimal = 10,//十进制 Hexadecimal = 16//十六进制 }
/// <summary> /// 返回用于在指定的编号方案中使用的字符 /// </summary> /// <param name="scheme"></param> /// <returns></returns> private static string GetCharactersForNumberingScheme(NumberingSchemes scheme) { string characters; switch(scheme) { case NumberingSchemes.AToZ: characters = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ"; break; case NumberingSchemes.ZeroToZ: characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; break; default: throw new ArgumentOutOfRangeException("scheme"); } return characters; } /// <summary> /// 将指定的数转化为10进制 /// </summary> /// <param name="value"></param> /// <param name="fromBase"></param> /// <param name="characters"></param> /// <param name="maxFromSchemeCharacter"></param> /// <returns></returns> private static long ConvertToBase10(string value,int fromBase,string characters,int maxFromSchemeCharacter) { StringBuilder fromValue = new StringBuilder(value); int power = 0; long result = 0; while(fromValue.Length>0) { int index = Array.IndexOf<char>(characters.ToCharArray(), fromValue[fromValue.Length - 1]); if (index < 0) throw new FormatException("Unsupported character in value string"); if (index >= maxFromSchemeCharacter) throw new FormatException("Value contains character not valid for number base"); result += (index * (long)Math.Pow(fromBase, power)); //溢出检查 if (result < 0) throw new OverflowException(); fromValue.Length--; power++; } return result; } /// <summary> /// 将指定的字符从10进制转化为指定的进制 /// </summary> /// <param name="value"></param> /// <param name="toBase"></param> /// <param name="characters"></param> /// <returns></returns> private static string ConvertFromBase10(long value,int toBase,string characters) { StringBuilder builer = new StringBuilder(); while(value>0) { int remainder = (int)(value % toBase); builer.Insert(0, characters[remainder]); value /= toBase; } return builer.ToString(); }
完整代码下载:
点击打开链接
DEMO:
try
{
int fromBase = int.Parse(DropDownList1.SelectedValue);
int toBase = int.Parse(DropDownList2.SelectedValue);
TextBox3.Text = Converter.Convert(fromBase, toBase, TextBox2.Text);
}
catch (Exception ex)
{
TextBox3.Text = ex.Message;
}
相关文章推荐
- 算法优化:rgb向yuv的转化最优算法,快得让你吃惊!
- SSE图像算法优化系列十五:YUV/XYZ和RGB空间相互转化的极速实现(此后老板不用再担心算法转到其他空间通道的耗时了)。
- 记录转化为有层次结构的树状列表的通用算法
- iOS 算法之:阿拉伯数字转化为汉语数字
- 算法优化:rgb向yuv的转化最优算法,快得让你吃惊!
- 教程序员如何把算法转化为追女孩子的高招 @测测你喜欢的人同时有多少人在追求
- 算法(四)字符串转化为整数相加
- 二分图除了用匈牙利算法,还可以先预处理一下数据,转化为最大流来做
- 算法:把阿拉伯金额转化为汉字表示的金额
- 字符串转化数字算法(C#)
- 算法优化:rgb向yuv的转化最优算法,快得让你吃惊!
- 经典算法-字符串转化为整数
- 算法优化:rgb向yuv的转化最优算法,快得让你吃惊(转)
- 第十一周项目一 验证算法(2)二叉树构造算法的验证(由顺序存储结果转化为二叉链存储结构)
- 算法题——将student a am i转化为i am a student
- 算法与数据结构(2)——图的表示法与常用的转化算法
- 算法优化:rgb向yuv的转化最优算法,快得让你吃惊!
- JAVA IP地址相关:用Java来获取访问者真实的IP地址,IP地址转化成long型数的算法
- 【算法题】整数与字符串之间的相互转化
- 十六进制快速转换八进制(算法核心可适用于2^n进制转化)