|
|
// Package bele 提供了大小端的转换操作
|
|
|
//
|
|
|
// be是big endian的缩写,即大端
|
|
|
// le是little endian的缩写,即小端
|
|
|
//
|
|
|
// assume local is `le`
|
|
|
//
|
|
|
package bele
|
|
|
|
|
|
import (
|
|
|
"encoding/binary"
|
|
|
"io"
|
|
|
"math"
|
|
|
)
|
|
|
|
|
|
func BEUint16(p []byte) uint16 {
|
|
|
return binary.BigEndian.Uint16(p)
|
|
|
}
|
|
|
|
|
|
func BEUint24(p []byte) (ret uint32) {
|
|
|
ret = 0
|
|
|
ret |= uint32(p[0]) << 16
|
|
|
ret |= uint32(p[1]) << 8
|
|
|
ret |= uint32(p[2])
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func BEUint32(p []byte) (ret uint32) {
|
|
|
return binary.BigEndian.Uint32(p)
|
|
|
}
|
|
|
|
|
|
func BEFloat64(p []byte) (ret float64) {
|
|
|
a := binary.BigEndian.Uint64(p)
|
|
|
return math.Float64frombits(a)
|
|
|
}
|
|
|
|
|
|
func LEUint32(p []byte) (ret uint32) {
|
|
|
return binary.LittleEndian.Uint32(p)
|
|
|
}
|
|
|
|
|
|
func BEPutUint24(out []byte, in uint32) {
|
|
|
out[0] = byte(in >> 16)
|
|
|
out[1] = byte(in >> 8)
|
|
|
out[2] = byte(in)
|
|
|
}
|
|
|
|
|
|
func BEPutUint32(out []byte, in uint32) {
|
|
|
binary.BigEndian.PutUint32(out, in)
|
|
|
}
|
|
|
|
|
|
func LEPutUint32(out []byte, in uint32) {
|
|
|
binary.LittleEndian.PutUint32(out, in)
|
|
|
}
|
|
|
|
|
|
func WriteBEUint24(writer io.Writer, in uint32) error {
|
|
|
_, err := writer.Write([]byte{uint8(in >> 16), uint8(in >> 8), uint8(in & 0xFF)})
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
func WriteBE(writer io.Writer, in interface{}) error {
|
|
|
return binary.Write(writer, binary.BigEndian, in)
|
|
|
}
|
|
|
|
|
|
func WriteLE(writer io.Writer, in interface{}) error {
|
|
|
return binary.Write(writer, binary.LittleEndian, in)
|
|
|
}
|