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