前一段时间我发现了这段代码,我想了解它是如何工作的)
int index = (int)c % 32 +1;
我已成功使用此行将字母转换为数字 - 例如a变为1(A也是如此)有人可以解释一下这是怎么发生的(我看起来有点基础32但不是明智的)?会有一种简单的方法将整数转换回字母吗?
答案 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加到小写。