转换方式类似Excel列序号这种表示方式。A=1,AA=27,BA = 26^2+1。26进制采用A-Z表示。求帮我写两个相互转换的函数,我写了半天都有各种问题,10进制转26进制,直接绕死了。我已经找到一种方法了/// <summary>10进制转26进制(字母)</summary>/// <param name="parameter"></param>/// <returns></returns>public static string NumberToLetter(int parameter){int parameter1 = parameter - 1;string[] radix = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };string result = "";int len = 0;int remainder = 0;len = parameter1 / 26;remainder = parameter1 % 26;result = radix[remainder];while (len > 0){remainder = (len - 1) % 26;len = len / 26;result = radix[remainder] + result;}return result;}
1 回答
繁星淼淼
TA贡献1775条经验 获得超11个赞
char [] Cha=new char[26]{'Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y'}; public string ConvTo26(int initialNum) { string Result=""; int Mid=initialNum ; int Mod = 26; int Num = 0; bool EndCon = true; if (Mid < 0) { Result += '-'; Mid *= -1; } while (EndCon) { Num=Mid / Mod; if (Num > 0) { Result += Cha[Num]; Mid = Mid - Mod * Num; } else { Result += Cha[Mid]; EndCon = false; } } return Result; } public int ConvTo10(string initialNum) { int Result = 0; int Mod = 26; char[] Mid = initialNum.ToCharArray(); int len = Mid.Length; for (int i=0; i < len; i++) { if (Mid[len - 1 - i] == '-') Result *= -1; else { Result += (int)Math.Pow(Mod, i) * Array.IndexOf(Cha, Mid[len - 1 - i]); } } return Result; }//你试下吧 |
- 1 回答
- 0 关注
- 148 浏览
添加回答
举报
0/150
提交
取消
