代码之家  ›  专栏  ›  技术社区  ›  Mike Webb

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

  •  1
  • Mike Webb  · 技术社区  · 16 年前

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

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

    同样的代码在C#中不起作用。我怎样才能用C#完成这个任务?

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

    6 回复  |  直到 16 年前
        1
  •  8
  •   Reed Copsey    16 年前

    当你加(减)两个字符时,你会得到一个C#中的Int32。这将起作用:

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

    如果需要char,则需要再次显式强制转换它:

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

    然而,这很可能是:

    char letter = (char) ('A' + (char)((myIndex - 1) % 26));
    
        2
  •  6
  •   plinth    16 年前

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

    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.
    }
    
        3
  •  4
  •   Vlad    16 年前
    char letter = (char)('A' + (myIndex-1)%26);
    

        4
  •  2
  •   Matti Virkkunen    16 年前

    在C#中,你必须稍微改变你的角色:

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

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

    char letter = (char)('A' + ((myIndex - 1) % 26));
    
        5
  •  1
  •   soulia    16 年前

    扩展方法怎么样?

        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();

        6
  •  0
  •   Krisc    16 年前

    这应该管用。。。

    byte upperA = 65;
    byte index = 1;
    
    char letter = (char)(upperA + (index % 27));
    
    Console.WriteLine(letter);
    

    我也喜欢里德的回答。