★ 题目
https://tour.go-zh.org/methods/23
练习:rot13Reader
有种常见的模式是一个 io.Reader 包装另一个 io.Reader,然后通过某种方式修改其数据流。
例如,gzip.NewReader 函数接受一个 io.Reader(已压缩的数据流)并返回一个同样实现了 io.Reader 的 *gzip.Reader(解压后的数据流)。
编写一个实现了 io.Reader 并从另一个 io.Reader 中读取数据的 rot13Reader,通过应用 rot13 代换密码对数据流进行修改。
rot13Reader 类型已经提供。实现 Read 方法以满足 io.Reader。
★ 代码
package main
import (
"io"
"os"
"strings"
)
type rot13Reader struct {
r io.Reader
}
func (r13 rot13Reader) Read(buf []byte) (int, error) {
inbuf := make([]byte, 128)
n, err := r13.r.Read(inbuf)
if err != nil {
return 0, nil
}
for i := 0; i < n; i++ {
if inbuf[i] >= 'N' && inbuf[i] <= 'Z' || inbuf[i] >= 'n' && inbuf[i] <= 'z' {
buf[i] = inbuf[i] - 13
} else if inbuf[i] >= 'A' && inbuf[i] < 'N' || inbuf[i] >= 'a' && inbuf[i] < 'n' {
buf[i] = inbuf[i] + 13
} else {
buf[i] = inbuf[i]
}
}
return n, nil
}
func main() {
s := strings.NewReader("Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}
输出:You cracked the code!
如果在 https://tour.go-zh.org/methods/23 这里运行提示 process took too long,可以到 https://golang.google.cn/ 主页中来测试。
本文介绍了一种使用Go语言实现的ROT13代换密码解密方法。通过创建一个符合io.Reader接口的rot13Reader类型,文章展示了如何对输入的数据流进行ROT13加密或解密,并给出了完整的代码示例。
2820

被折叠的 条评论
为什么被折叠?



