为了账号安全,请及时绑定邮箱和手机立即绑定

这个 rot13 密码有什么问题?

这个 rot13 密码有什么问题?

Go
弑天下 2023-07-26 10:04:50
我在使用tour.golang.org/methods/23时遇到了一些问题package mainimport (    "io"    "os"    "strings")type rot13Reader struct {    r io.Reader}func (r rot13Reader) Read(s []byte) (int, error) {    a, e := r.r.Read(s)    for i := 0; i < a; i++ {        if(s[i] >= 'a') {            s[i] = ((s[i] - 'a') + 13) % 26 + 'a'           }        if(s[i] >= 'A') {            s[i] = ((s[i] - 'A') + 13) % 26 + 'A'           }    }    return a, e}func main() {    s := strings.NewReader("Lbh penpxrq gur pbqr!")    r := rot13Reader{s}    io.Copy(os.Stdout, &r)}我先添加然后修改,但在考虑了小写和大写 ascii 代码之间的差距后,结果看起来不太正确YHN VKTVDXW MAX VHWX!
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

'A'(从数字上来说)是 65。字母表中越深的字母越多,最多可达'Z'90。

'a'(从数字上来说)是 97。字母表中越深的字母越多,最多为'z'122。

(不要问我为什么要记住一些 ASCII。我确实必须查找这些z值。:-))

练习 1:如果s[i]'a',即 97,然后将其 rot-13 得到'n'(110),这是否大于 65?当你听到第二个 if陈述时会发生什么?

练习2:如果s[i]'_'(十进制95),这里会发生什么?

(你不断改变你的问题,所以现在这些练习有点没有实际意义。)


查看完整回答
反对 回复 2023-07-26
?
白衣非少年

TA贡献1155条经验 获得超0个赞

如果您直接使用字母的 ascii 值,则必须对它们进行偏移。大写 AZ 的 ascii 值是 65-90(含),小写 az 的 ascii 值是 97-122(含)。



查看完整回答
反对 回复 2023-07-26
?
慕斯王

TA贡献1864条经验 获得超2个赞

通过修复字母检查的界限,确保只处理字母

在“a”和“z”之间以及“A”和“Z”之间

当你的第二个 Z 需要大写时,它是小写的


查看完整回答
反对 回复 2023-07-26
  • 3 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信