在c#中将base-27(或base-X)转换为base-10?

是否有现成的function可以在c#中进行基本转换? 我希望从基数为26和基数为27的数字转换为基数10.我可以在纸上做,但我不是一个非常有经验的程序员,如果可能的话,宁可不要从头做。 谢谢!

有一个现成的函数可以将数字从基数2,8或16转换为基数10( Convert.ToInt32 )。 如果你想将数字从26或27基数转换为10,你必须自己做。

现在,我从未听说过基数为26的数字,所以我只是假设’数字’是A到Z(A的值为0,Z的十进制值为25)。 要从base 26转换为base 10,您应该执行以下操作:

 string charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int GetDigitValue(char digit) { return charset.IndexOf(digit); } int ConvertFromBase26(string number) { int result = 0; foreach(char digit in number) result = result * charset.Length + GetDigitValue(digit); return result; } 

要从基数27转换,只需添加代表26的任何字符。

注意:没有纠错(你可以转换字符串“$#$ @#$ @”,它会得到一个很好的负数),GetDigitValue效率很低,如果你打算这样做,应该用查找表替换转换很多。

编辑:一个LINQ版本,只是为了踢。

同样,假设字符串仅包含合法数字,则无法进行有效查找和错误纠正。

 string charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int ConvertFromBase(string charset, string number) { return number.Select(c=>charset.IndexOf(c)).Aggregate(0, (x, y) => x*charset.Length +y); } 

我认为第一个版本更具可读性。

建立你的答案。 您不需要charset查找列表,因为您可以只使用char ASCII值。

 int ConvertFromBase26(string number) { return number.Select(digit => (int)digit - 64).Aggregate(0, (x, y) => x * 26 + y); } 

我使用它在使用Excel编程时将列字符串地址转换为int。