如何在GO编程中的特定索引处更改byte []中的某些字节?

时间:2014-07-19 03:42:50

标签: go byte

我有一个[]字节本质上是一个字符串,在这个数组中我找到了一些我想用索引改变的东西:

content []byte
key []byte
newKey []byte
i = bytes.Index(content, key)

所以我找到了内容的关键字(在索引I处),现在我想用newKey替换key但是我似乎找不到添加它的方法我正在尝试一些不起作用的显而易见的事情: )

content[i] = newKey

是否有一些函数允许我在content [] byte中用“newKey”替换“key”?

谢谢,

1 个答案:

答案 0 :(得分:4)

根据文章" Go Slices: usage and internals",您可以使用copy来创建包含正确内容的切片:

playground

package main

import "fmt"

func main() {
    slice := make([]byte, 10)
    copy(slice[2:], "a")
    copy(slice[3:], "b")
    fmt.Printf("%v\n", slice)
}

输出:

[0 0 97 98 0 0 0 0 0 0]

在您的情况下,如果len(key) == len(newJey)

playground

package main

import "fmt"
import "bytes"

func main() {
    content := make([]byte, 10)
    copy(content[2:], "abcd")
    key := []byte("bc")
    newKey := []byte("xy")
    fmt.Printf("%v %v\n", content, key)

    i := bytes.Index(content, key)
    copy(content[i:], newKey)
    fmt.Printf("%v %v\n", content, newKey)
}

输出:

[0 0 97 98 99 100 0 0 0 0] [98 99]
[0 0 97 120 121 100 0 0 0 0] [120 121]