Mass Byte Manipulation

I am writing a program that should analyze and respond to network packets, but it annoys me a bit, because I cannot make a simple style C return (int)buffer[at]; with an array of bytes. Is there a better way to get 4 bytes from byte [] as int32 than the following?

 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]) } 

It works correctly, but I wondered if there is a better way to do this.

+4
source share
1 answer
 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 
+2
source

Source: https://habr.com/ru/post/1333310/


All Articles