猿问

Go io 阅读器包装器

我已经编写了以下代码,它试图将字母数字字符加密为 13。这是 go 之旅中的一个示例。我已经使用日志库检查了字节数组 p 中的值,在密码之后,它们似乎旋转了 13。出于某种原因,当它打印到 STDOUT 时,字符没有被加密。我错误地改变了字节数组 p ?


package main


import (

    "io"

    "os"

    "strings"

)


type rot13Reader struct {

    r io.Reader

}


func cipher(in byte) (out byte) {

    out = in

    if in > 64 && in < 91 {

        out = in - 64

        out = out + 13

        out = out % 26

        out = out + 64

    }

    if in > 96 && in < 123 {

        out = in - 96

        out = out + 13

        out = out % 26

        out = out + 96

    }

    return

}


func (reader rot13Reader) Read(p []byte) (n int, err error) {

    for index := range p {

        p[index] = cipher(p[index])

    }

    n, err = reader.r.Read(p)

    return

}


func main() {

    s := strings.NewReader(

        "Lbh penpxrq gur pbqr!\n")

    r := rot13Reader{s}

    io.Copy(os.Stdout, &r)

}


慕森卡
浏览 181回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答