英文:
trying to insert integer into byte array
问题
我有一个字节数组:
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)
英文:
I have an array of bytes
app0 := []byte("\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x01\x00\x00\x00\x00\x00\x00")
I am trying to figure out how to replace app0[13:15]
with two bytes containing 300
.
Please help. I tried the following but it won't even compile:
app0[13:15] = []byte(300)
答案1
得分: 1
我有点困惑,你到底想用这段代码做什么?
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
函数来替换数组的内部元素。
英文:
I'm a little confused what you are even trying to do with
app0[13:15] = []byte(300)
A single byte can't hold the value 300, and you have a slice of bytes. I'll assume you want the value 300 converted into two bytes:
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()
}
https://play.golang.org/p/qADHwCCFQG
The trick here is you have to actually get an array of bytes, and then you can use the variadic operator (...
) and then append
function to replace the inner elements of the array.
答案2
得分: 1
例如,
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]
英文:
For example,
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)
}
Output:
[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]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论