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

时间:2012-03-04 21:47:20

标签: c# decimal base

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

2 个答案:

答案 0 :(得分:3)

有一个现成的功能可以将数字从基数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);
}

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

答案 1 :(得分:0)

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

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

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