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,但是在 字节存储中是放在起始地址,所以属于小端存储。