从字母转换为字母表中的相对位置(c#)

时间:2014-11-09 13:52:40

标签: c# alphabet

前一段时间我发现了这段代码,我想了解它是如何工作的)

int index = (int)c % 32 +1;

我已成功使用此行将字母转换为数字 - 例如a变为1(A也是如此)有人可以解释一下这是怎么发生的(我看起来有点基础32但不是明智的)?会有一种简单的方法将整数转换回字母吗?

3 个答案:

答案 0 :(得分:6)

所有字母都有整数代码。例如'a'有代码97.所以(int)'a'是97.所以(int)'a' % 32是1.因为英文字母少于32个,所以一切都正确转换。同样通过快乐巧合,上下字母之间的差异为32(例如'a' - 'A' == 32)。因此适用于大写字母。

要将整数转换回字母,您还可以使用整数代码。例如,'A' + index - 1会在字母表中为您提供数字为index的大写字母。同样'a' + index - 1会给出相同数字的小写字母。

以ASCII为例,查看符号的整数代码。

答案 1 :(得分:3)

这完全取决于字符(和字符串)的实际表示方式。每个字符都使用code points编码,这只是数字。许多代码点组成了一个代码页,它本质上是一个将数字映射到实际字符的表。

忽略Unicode附带的大型代码页,您现在可以查看ASCII,这是前128个代码点的编码。在那里,您可以看到标准大写字母从数字65开始,而小写字母从数字97开始。

所以在你的公式中,如果我们假设c始终是字母表中的字符,我们知道它的数值介于65和90之间,或介于97和122之间。所以取字符{{1 }或'A',我们的值分别为65或97.

剩下的就是巧合,大写和小写字母从32开始,65模32是1.这使'a'给你字母表中的字符索引在1。

答案 2 :(得分:2)

这是有效的,因为.NET中的默认字符编码是UTF-16。对于字母字母,这将与ASCII匹配。

如果查看ASCII table,您将看到大写AZ从位置65开始编码,小写az从位置97开始编码。您提供的公式将返回1表示大写或小写' A',2表示大写或小写'B'等。

从该表中,您还应该能够将1到26之间的整数转换为您选择的大小写的字符:将64加到大写的整数,或96加到小写。