gpt4 book ai didi

java - 从 ASCII 值到 Char 的转换

转载 作者:行者123 更新时间:2023-11-29 04:00:45 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com