首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c#中将base-27 (或base-X)转换为base-10?

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

Stack Overflow用户
提问于 2012-03-05 05:47:20
回答 2查看 5K关注 0票数 5

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-05 06:03:29

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

现在,我从来没有听说过以26为基数的数字,所以我假设“数字”是从A到Z (A的值是0,Z的十进制值是25)。要从基数26转换为基数10,应执行以下操作:

代码语言:javascript
复制
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版本,只是为了好玩。

同样,假设字符串只由合法数字组成,则没有有效的查找和纠错。

代码语言:javascript
复制
string charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int ConvertFromBase(string charset, string number)
{
    return number.Select(c=>charset.IndexOf(c)).Aggregate(0, (x, y) => x*charset.Length +y);
}

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

票数 4
EN

Stack Overflow用户

发布于 2013-08-16 05:03:45

以你的答案为基础。您不需要字符集查找列表,因为您可以只使用char ASCII值。

代码语言:javascript
复制
int ConvertFromBase26(string number)
{
     return number.Select(digit => (int)digit - 64).Aggregate(0, (x, y) => x * 26 + y);
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9559122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档