/// <summary> /// 从M进制转换为N进制 /// </summary> internal class MBase2NBase { /// <summary> /// M进制值字符串 /// </summary> private string MValue = "123"; /// <summary> /// 除法商 /// </summary> private string Quotient = null; /// <summary> /// M进制 /// </summary> private int M = 10; /// <summary> /// N进制 /// </summary> private int N = 8; /// <summary> /// .ctor /// </summary> public MBase2NBase() { } /// <summary> /// .ctor /// </summary> /// <param name="mValue">M进制值字符串</param> /// <param name="m">M进制(如10).参数值在2~36的范围内</param> /// <param name="n">N进制(如8),则意味着从10进制转换成8进制.参数值在2~36的范围内</param> public MBase2NBase(string mValue, int m, int n) { this.M = m; this.N = n; this.MValue = mValue; } /// <summary> /// 开始转换 /// </summary> /// <param name="mValue">M进制值字符串</param> /// <param name="m">M进制(如10).参数值在2~36的范围内</param> /// <param name="n">N进制(如8),则意味着从10进制转换成8进制.参数值在2~36的范围内</param> /// <returns>N进制字符串</returns> public string Transform(string mValue, int m, int n) { this.M = m; this.N = n; this.MValue = mValue; return Transform(); } /// <summary> /// M进制值字符串 /// </summary> /// <returns>N进制字符串</returns> public string Transform() { if (M < 2 || M > 36) { throw new ArgumentOutOfRangeException("参数值不在2~36的范围内"); } if (N < 2 || N > 36) { throw new ArgumentOutOfRangeException("参数值不在2~36的范围内"); } if (M == N) { return MValue; } String nValue = ""; Quotient = MValue; while (Quotient.Length > 0) { nValue = Remainder(Quotient) + nValue; } return nValue; } /// <summary> /// 对给定的M进制字符串对n求余 /// </summary> /// <param name="mTempValue"></param> /// <returns></returns> private String Remainder(String mTempValue) { Quotient = ""; int temp = 0; while (mTempValue.Length > 0) { int t = GetIntFromStringFirstChar(mTempValue.Substring(0, 1)); mTempValue = mTempValue.Substring(1); temp = temp*M + t; Quotient += GetStrFromInt(temp / N); temp = temp%N; } while (Quotient.Length > 0 && Quotient[0] == ‘0‘) { Quotient = Quotient.Substring(1); } return GetStrFromInt(temp); } /// <summary> /// 字符串转换成Int /// </summary> /// <param name="str"></param> /// <returns></returns> private int GetIntFromStringFirstChar(String str) { return str[0] <= ‘9‘ && str[0] >= ‘0‘ ? str[0] - ‘0‘ : str[0] - ‘a‘ + 10; } /// <summary> /// Int转换为相应进制的字符 /// </summary> /// <param name="value"></param> /// <returns></returns> private String GetStrFromInt(int value) { String result = null; if (value >= 0 && value <= 9) result = ((char) (‘0‘ + value)).ToString(); else if (value > 9 && value < 36) { result = ((char) (‘a‘ + value - 10)).ToString(); } else { throw new Exception("未知错误"); } return result; } }
时间: 2024-10-26 11:39:00