是否有现成的函数可以在c#中进行基本转换?我希望从基数26和基数27的数字转换为基数10。我可以在纸上做,但我不是一个非常有经验的程序员,宁可不从头做,如果可能的话。谢谢!
发布于 2012-03-05 06:03:29
有一个现成的函数可以将数字从基数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;
}要从基数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);
}不过,我认为第一个版本更具可读性。
发布于 2013-08-16 05:03:45
以你的答案为基础。您不需要字符集查找列表,因为您可以只使用char ASCII值。
int ConvertFromBase26(string number)
{
return number.Select(digit => (int)digit - 64).Aggregate(0, (x, y) => x * 26 + y);
}在使用Excel编程时,我使用它将列字符串地址转换为int。
https://stackoverflow.com/questions/9559122
复制相似问题