如何将整数转换为C#中的字符?

时间:2010-04-12 19:01:56

标签: c# char

我正在尝试将索引1到27转换为相应的大写字母。我知道在C ++中我可以输入:

char letter = 'A' + (char)(myIndex % 27);

此相同的代码在C#中不起作用。如何在C#中完成此任务?

编辑:如果有更好的数学解决方案,我宁愿不必为此编码枚举或开关语句。

6 个答案:

答案 0 :(得分:8)

当您添加(或减去)两个字符时,您将获得C#中的Int32。这将有效:

int letter = 'A' + (char)(myIndex % 27);

如果你想要一个字符,你需要再次明确地再次使用它:

char letter = (char) ('A' + (char)(myIndex % 27));

然而,这很可能应该是:

char letter = (char) ('A' + (char)((myIndex - 1) % 26));

答案 1 :(得分:6)

这是一个表驱动的解决方案:

char ToUpperChar(int index)
{
    if (index < 1 || index > 26)
        throw new ArgumentOutOfRangeException("index");

    return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[index-1]; // took out the % - it's range-checked above.
}

答案 2 :(得分:4)

char letter = (char)('A' + (myIndex-1)%26);

(编辑幻数,调整后的指数)

答案 3 :(得分:2)

在C#中,您必须采用略有不同的方式进行投射:

char letter = (char)('A' + (myIndex % 27));

然而,你的数学可能也是错误的,这可能更接近你真正想要的东西:

char letter = (char)('A' + ((myIndex - 1) % 26));

答案 4 :(得分:1)

扩展方法怎么样?

    public static int Index(this char letter)
    {
        const int offset = 64;
        if(letter >= 'A' && letter <= 'Z')
            return (Convert.ToInt32(letter) - offset);
        return 0;
    }

//使用... char letter ='A'; int index = letter.Index();

答案 5 :(得分:0)

这应该有用......

byte upperA = 65;
byte index = 1;

char letter = (char)(upperA + (index % 27));

Console.WriteLine(letter);

我也喜欢里德的回答。