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,但是在 字節存儲中是放在起始地址,所以屬於小端存儲。