endian.go 595 B

1234567891011121314151617181920212223242526272829
  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. // Clang is set to either "el" or "eb" depending on the host's endianness.
  10. var ClangEndian string
  11. func init() {
  12. if isBigEndian() {
  13. NativeEndian = binary.BigEndian
  14. ClangEndian = "eb"
  15. } else {
  16. NativeEndian = binary.LittleEndian
  17. ClangEndian = "el"
  18. }
  19. }
  20. func isBigEndian() (ret bool) {
  21. i := int(0x1)
  22. bs := (*[int(unsafe.Sizeof(i))]byte)(unsafe.Pointer(&i))
  23. return bs[0] == 0
  24. }