Go 正在尝试将整数插入字节数组

Go 正在尝试将整数插入字节数组,go,Go,我有一个字节数组 app0 := []byte("\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00") 我试图找出如何用包含300的两个字节替换app0[13:15] 请帮忙。我尝试了以下操作,但它甚至无法编译: app0[13:15] = []byte(300) 我有点搞不懂你到底想干什么 app0[13:15] = []byte(300) 单个字节不能保存300的值,而您有一个字节片。我假设

我有一个字节数组

app0 := []byte("\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00")
我试图找出如何用包含
300
的两个字节替换
app0[13:15]

请帮忙。我尝试了以下操作,但它甚至无法编译:

app0[13:15] = []byte(300)

我有点搞不懂你到底想干什么

app0[13:15] = []byte(300)
单个字节不能保存300的值,而您有一个字节片。我假设您希望将值300转换为两个字节:

import (
    "fmt"
    "bytes"
    "encoding/binary"
)

func main() {
    app0 := []byte("\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00")
    app0 =  append(app0[:13], append(intToBytes(uint16(300)), app0[15:]...)...)
    fmt.Println(app0)
}

func intToBytes(i uint16) []byte {
    buf := new(bytes.Buffer)
    _ = binary.Write(buf, binary.LittleEndian, i)
    return buf.Bytes()
}

这里的诀窍是你必须实际获得一个字节数组,然后你可以使用可变运算符(
..
),然后使用
append
函数替换数组的内部元素。

例如

package main

import "fmt"

func main() {
    app0 := []byte("\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00")
    fmt.Println(app0)
    app0[13], app0[14] = 300>>8, 300&0xFF
    fmt.Println(app0)
}
输出:

[255 224 0 16 74 70 73 70 0 1 1 1 0 0 0 0 0 0]
[255 224 0 16 74 70 73 70 0 1 1 1 0 1 44 0 0 0]

是的,300可以放进两个字节。非常感谢。此代码不可移植。它只能在小端结构上正常工作,对吗?@akonsu:对于小端结构,写:
app0[13],app0[14]=300&0xFF,300>>8