ascii和int之间的奇怪Java转换

时间:2018-12-17 16:33:02

标签: java unicode ascii

我正在为学校编写一些代码,练习是:做凯撒密码。 代码:

char temp = 'u';
int key = 14; 
int tempInt = ((int) temp) + key;
temp = (char) tempInt;

温度应该是132(ASCII),但是java给我'?'。我该如何解决这个问题?我认为Java正在以Unicode格式工作...但是我不知道如何在文本(凯撒密码)中添加键值。

1 个答案:

答案 0 :(得分:3)

与您一起,代码temp为131,这不是可打印的字符 为了执行Cesare密码,您可能应该仅对可转换字符(基本上从32到127)进行操作。因此,您应该使用模数,以便127 + 1为32

您需要定义的是您要处理的字符范围(可能仅从'a'到'z'),然后确定该范围的大小。

具有32和127的示例:

char temp = 'u';
int key = 14;
int tempInt = ((int) temp) + key;
tempInt -= 32;
tempInt %= (127 - 32);
tempInt += 32;
temp = (char) tempInt;
System.out.println(temp);