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

mil*_*ley 5 c# decimal base

是否有现成的函数可以在c#中进行基本转换?我希望将基数26和基数27的基数转换为基数10。我可以在纸上进行此操作,但是我不是一个经验丰富的程序员,并且如果可能的话,不希望从头开始。谢谢!

zmb*_*mbq 5

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

现在,我从未听说过基数 26 的数字,所以我只是假设“数字”是 A 到 Z(A 的值为 0,Z 的十进制值为 25)。要将基数 26 转换为基数 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;
}
Run Code Online (Sandbox Code Playgroud)

要从基数 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);
}
Run Code Online (Sandbox Code Playgroud)

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