转换方式类似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 关注
- 140 浏览
添加回答
举报
0/150
提交
取消