gpt4 book ai didi

go - 函数改变字节 slice 参数

转载 作者:IT王子 更新时间:2023-10-29 01:39:44 25 4
gpt4 key购买 nike

我有以下代码,其中我有一段带有字母表的字节,我将这个字母表数组复制到一个新变量 (cryptkey) 中,然后使用一个函数对其进行洗牌。结果是字母表和 cryptkey 字节 slice 被打乱。我怎样才能防止这种情况发生?

package main

import (
"fmt"
"math/rand"
)

func main() {
alphabet := []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz.")
cryptkey := alphabet
fmt.Println(string(alphabet))
cryptkey = shuffle(cryptkey)
fmt.Println(string(alphabet))
}

func shuffle(b []byte) []byte {
l := len(b)
out := b
for key := range out {
dest := rand.Intn(l)
out[key], out[dest] = out[dest], out[key]
}
return out
}

结果:

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz. miclOfEInzJNvZe.YuVMCdTbXyqtaLwHGjUrABhog xQPWSpKRkDsF

Playground !

最佳答案

复制一份。例如,

package main

import (
"fmt"
"math/rand"
)

func main() {
alphabet := []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz.")
cryptkey := alphabet
fmt.Println(string(alphabet))
cryptkey = shuffle(cryptkey)
fmt.Println(string(alphabet))
}

func shuffle(b []byte) []byte {
l := len(b)
out := append([]byte(nil), b...)
for key := range out {
dest := rand.Intn(l)
out[key], out[dest] = out[dest], out[key]
}
return out
}

输出:

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz.
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz.

关于go - 函数改变字节 slice 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27460494/

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