go语言判断系统是大端存储还是小端存储

 阅读大约需要1分钟

go语言判断系统是大端存储还是小端存储

package main

import (
	"encoding/binary"
	"fmt"
	"unsafe"
)

const intWidth = unsafe.Sizeof(0)

var byteOrder binary.ByteOrder

func main() {
	var a = 1
	if v := (*[intWidth]byte)(unsafe.Pointer(&a)); v[0] == 0 {
		byteOrder = binary.BigEndian
	} else {
		byteOrder = binary.LittleEndian
	}
	fmt.Println(intWidth)
	v1 := (*[intWidth]byte)(unsafe.Pointer(&a))
	fmt.Println(*v1)
	fmt.Println(byteOrder)
}

运行结果如下:

8
[1 0 0 0 0 0 0 0]
LittleEndian

unsafe.Sizeof(0)查看int类型占用空间的大小结果是8,也就是一个int类型占用8个字节。

int类型变量a=1,之后把a转换成byte数组,可以看到变量a在字节数组中的存储 v[0]=1,可以判断出int类型变量a在系统中是小端存储,即将低序字节存储在起始地址, 因为值为a=1,十六进制表示为 00 00 00 00 00 00 00 01,低位是01,十进制为1,但是在 字节存储中是放在起始地址,所以属于小端存储。