endian.go 454 B

123456789101112131415161718192021222324
  1. package internal
  2. import (
  3. "encoding/binary"
  4. "unsafe"
  5. )
  6. // NativeEndian is set to either binary.BigEndian or binary.LittleEndian,
  7. // depending on the host's endianness.
  8. var NativeEndian binary.ByteOrder
  9. func init() {
  10. if isBigEndian() {
  11. NativeEndian = binary.BigEndian
  12. } else {
  13. NativeEndian = binary.LittleEndian
  14. }
  15. }
  16. func isBigEndian() (ret bool) {
  17. i := int(0x1)
  18. bs := (*[int(unsafe.Sizeof(i))]byte)(unsafe.Pointer(&i))
  19. return bs[0] == 0
  20. }