2014-07-19 46 views
2

我有[]字節這基本上是一個字符串,此數組中我已經找到了我想用指數來改變:如何在GO編程的特定索引處更改某個字節[]中的某些字節?

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

的內容,因此我發現鑰匙(索引我),現在我想,以取代則newkey關鍵,但我似乎無法找到一種方法,將其添加在我試圖將無法正常工作:)

content[i] = newKey 

明顯的事情是有一些功能,可以讓我來代替內容[]字節中的「newKey」是否包含「key」?

感謝,

+0

使用拷貝檢查:http://stackoverflow.com/questions/24806867/golang-slicing-並且需要len(newKey)== len(key) – chendesheng

+0

如果[]字節本質上是一個字符串,爲什麼不使用字符串包? 'content = [] byte(strings.Replace(string(content),string(key),string(newKey)))'' – ABri

回答

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] 
相關問題