【问题标题】:How do I convert integers to characters in C#?如何在 C# 中将整数转换为字符?
【发布时间】:2010-04-12 19:01:56
【问题描述】:

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

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

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

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

【问题讨论】:

  • 字符字母 = Convert.ToChar(myIndex);
  • 字符字母 = Convert.ToChar(myIndex+64);

标签: c# char


【解决方案1】:

当您添加(或减去)两个字符时,您会在 C# 中得到一个 Int32。这将起作用:

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

如果你想要一个字符,你需要再次显式地转换它:

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

然而,这很可能实际上应该是:

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

【讨论】:

  • 是的。更好的是 s/myIndex/(myIndex - 1)/ :-)
【解决方案2】:

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

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.
}

【讨论】:

  • +1 以获得更原始的方法。这么多的类型转换变得无聊了;)而且它纯粹是数学的,因为数组索引是指针算术的语法糖。
【解决方案3】:
char letter = (char)('A' + (myIndex-1)%26);

(编辑出幻数,调整索引)

【讨论】:

  • 哦,对了。 '%26'。谢谢。我想我做的比它需要的更难。
【解决方案4】:

在 C# 中,您必须进行稍微不同的转换:

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

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

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

【讨论】:

  • %27 错了,应该是 26 :-) 拉丁字母只有 26 个字母。
  • 我从原始代码中复制了它......他说他有一个从 1 到 27 的索引。当然,要得到正确的拉丁字母,他应该这样做 ('A' + (char)((myIndex - 1) % 26))
  • 因为我不太确定 OP 到底想要什么。至少这解决了投射的问题。
【解决方案5】:

扩展方法怎么样?

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

//用法... 字符字母 = 'A'; int index = letter.Index();

【讨论】:

  • 对不起!错误的方法。试试这个... public static char CharToIndex(this int number) { const int offset = 64; if ( number >= 1 && number
【解决方案6】:

这应该可以工作......

byte upperA = 65;
byte index = 1;

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

Console.WriteLine(letter);

我也喜欢里德的回答。

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 2016-01-20
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多