java - 从 ASCII 值到 Char 的转换

标签 java ascii

String source = "WEDGEZ"
char letter = source.charAt(i);
shift=5;
for (int i=0;i<source.length();i++){
if (source.charAt(i) >=65 && source.charAt(i) <=90 )
  letterMix =(char)(('D' + (letter - 'D' + shift) % 26));
}

好的,我要做的是获取字符串 WEDGEZ,并将每个字母移动 5,这样 W 变成 B,E 变成 J,等等。但是我觉得我使用的数字有些不一致.

对于 if 语句,我使用的是 ASCII 值,对于 letterMix= 语句,我使用的是 1-26 之间的数字(我认为)。实际上,问题也与此有关:

什么是 (char)(('D' + (letter - 'D' + shift) % 26)); 仍然返回吗?它返回一个 char 权,但是从一个 int 转换而来。我在某个地方在线找到了该声明,我并没有完全自己编写它,所以该声明返回的到底是什么。

此代码的一般问题是对于 W 它返回 '/' 而对于 Z 它返回 _,我猜这意味着它正在使用 ASCII 值。我真的不知道如何处理这个问题。

编辑:新代码

    for (int i=0;i<source.length();i++)
        {
        char letter = source.charAt(i);
        letterMix=source.charAt(i);
        if (source.charAt(i) >=65 && source.charAt(i) <=90 ){
            letterMix=(char)('A' + (  ( (letter - 'A') + input ) % 26));
            }
        }

最佳答案

好吧,我不确定这是否是家庭作业,所以我会在代码上吝啬。

你正在写一个 Caesar Cipher移动 5。

要解决您的 Z -> _ 问题...我假设您希望将所有字母更改为编码字母(而不是奇怪的符号)。问题是 A-Z 的 ASCII 值介于 65 和 90 之间。 在编码 Z 时(例如),您最终将其加 5,得到值 95 (_)。

您需要做的是环绕可用的字母表。首先隔离字符在字母表中的相对位置(即 A = 0,B = 1 ...)您需要减去 65(这是 A 的 ASCII。添加您的 Shift 然后应用 modulus 26。这将使您的值回绕。

例如,它是您的编码 Z (ASCII=90),因此相对位置是 25 (= 90 - 65)。 现在,25 + 5 = 30,但您需要该值在 26 以内。所以您采用 modulus 26 所以 30 % 264 也就是 E

原来是这样

char letter = message(i);
int relativePosition = letter - 'A'; // 0-25
int encode = (relativePosition + shift) % 26
char encodedChar = encode + 'A' // convert it back to ASCII.

所以在一行中,

char encodedChar = 'A' + (  ( (letter - 'A') + shift ) % 26)

请注意,这仅适用于大写字母,如果您打算使用小写字母,则需要一些额外的处理。

您可以使用 Character.isUpperCase() 来检查大写。

关于java - 从 ASCII 值到 Char 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3784518/

相关文章:

java.lang.OutOfMemoryError : PermGen space: java reflection 错误

java - 从数组列表中安全地删除数据

Ruby 错误 UTF-8 到 ASCII

javascript - 删除键的 ASCII 键代码错误

python - 你如何在 python 中解码 ascii 字符串?

character - '`'字符叫什么?

java - 批处理运行java,找不到类

java - 如何让 JFrame 真正全屏?

c# - 如何编写具有固定长度和多个元素的正则表达式

java - 如何在 Java 中创建移动图形?