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