以下代码将字符A-Z转换为1到26之间的数字,为简单起见,所有这些都是大写。
static void Main(string[] args)
{
string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
foreach (char c in letters)
{
Console.WriteLine(c +" = " + CharToNumber(c));
Console.ReadLine();
}
}
static int CharToNumber(char character)
{
// index starts at 0, 65 is the ascii code for A hence the program -64 so start at 1 therefore A=1
return (int)Char.ToUpper(character) - 64;
}
static char NumberToChar(int number)
{
// code here
}
}
}
我正在尝试做同样的事情,反之亦然,因此将该数字转换回相同的字符。我不确定从哪里开始。任何想法都非常感谢,谢谢
答案 0 :(得分:3)
实施只是
static char NumberToChar(int number)
{
return (char) ('A' + number - 1); // "- 1" : You want to start from 1
}
相应地
static int CharToNumber(char character)
{
return character - 'A' + 1; // " + 1" : You want to start from 1
}
注意,在C#char
中实际上是 16位整数,所以你可以转换它。
编辑:根据您之前的代码,您还想修改Main(string[] args)
:
static void Main(string[] args) {
...
// Reverse
for (int i = 1; i <= 26; ++i)
Console.WriteLine(i + " = " + NumberChar(i));
Console.ReadLine();
}
}
答案 1 :(得分:0)
您可以直接从整数转换为字符,该字符返回具有相应Unicode值的字符。 A
的Unicode值为65,其余的英文字母按顺序继续,因此您只需将64添加到您的数字并返回Unicode字符。有a number of ways to do that。
如果你不想对Unicode偏移进行硬编码,你可以做到这一点:
static char NumberToChar(int number)
{
int offset = (int)'A' - 1;
return (char)(number + offset);
}