1 package bytewrite 2 3 import "unsafe" 4 5 type littleEndian struct{} 6 7 func (e littleEndian) Float32(b []byte) float32 { 8 i := e.Uint32(b) 9 return *(*float32)(unsafe.Pointer(&i)) 10 } 11 12 func (e littleEndian) PutFloat32(f float32) []byte { 13 return e.PutUint32(*(*uint32)(unsafe.Pointer(&f))) 14 } 15 16 func (e littleEndian) Float64(b []byte) float64 { 17 i := e.Uint64(b) 18 return *(*float64)(unsafe.Pointer(&i)) 19 } 20 21 func (e littleEndian) PutFloat64(f float64) []byte { 22 return e.PutUint64(*(*uint64)(unsafe.Pointer(&f))) 23 } 24 25 func (littleEndian) Uint16(b []byte) uint16 { 26 return uint16(b[0]) | uint16(b[1])<<8 27 } 28 29 func (littleEndian) PutUint16(v uint16) []byte { 30 var b [2]byte 31 b[0] = byte(v) 32 b[1] = byte(v >> 8) 33 return b[:] 34 } 35 36 func (littleEndian) Uint32(b []byte) uint32 { 37 return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 38 } 39 40 func (littleEndian) PutUint32(v uint32) []byte { 41 var b [4]byte 42 b[0] = byte(v) 43 b[1] = byte(v >> 8) 44 b[2] = byte(v >> 16) 45 b[3] = byte(v >> 24) 46 return b[:] 47 } 48 49 func (littleEndian) Uint64(b []byte) uint64 { 50 return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 51 } 52 53 func (littleEndian) PutUint64(v uint64) []byte { 54 var b [8]byte 55 b[0] = byte(v) 56 b[1] = byte(v >> 8) 57 b[2] = byte(v >> 16) 58 b[3] = byte(v >> 24) 59 b[4] = byte(v >> 32) 60 b[5] = byte(v >> 40) 61 b[6] = byte(v >> 48) 62 b[7] = byte(v >> 56) 63 return b[:] 64 }