gpt4 book ai didi

go - byte slice 操作

转载 作者:IT王子 更新时间:2023-10-29 00:46:50 26 4
gpt4 key购买 nike

我正在编写一个应该解析和回复网络数据包的程序,但我有点恼火,因为我不能做简单的 C 风格 return (int)buffer[at]; with字节数组。从 byte[] 中检索 4 个字节作为 int32 是否有比以下更好的方法?

func (packet *Packet) GetInt32(at int) int32 {
return int32(packet.buffer[at]) << 24 +
int32(packet.buffer[at+1]) << 16 +
int32(packet.buffer[at+2]) << 8 +
int32(packet.buffer[at+3])
}

它工作正常,但我在想是否有更好的方法来做到这一点。

最佳答案

package main

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

type Packet struct {
buffer []byte
}

func (p *Packet) Int32(i int) int32 {
return int32(binary.BigEndian.Uint32(p.buffer[i : i+4]))
}

func (p *Packet) Float32(i int) float32 {
return math.Float32frombits(binary.BigEndian.Uint32(p.buffer[i : i+4]))
}

func main() {
p := &Packet{buffer: []byte{0x01, 0x02, 0x00, 0x00, 0xFF, 0xFF, 0x07}}
fmt.Println(p.Int32(2), p.Float32(2))
}


Output: 65535 9.1834e-41

关于go - byte slice 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4528385/

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