golang大小端字节序

为什么要有字节序?

字节序,即字节的排列顺序。在计算机领域中,计算机内存中的字(word)由多个字节(bytes)组成,这些字节的排列顺序叫做字节序。

计算机中电路优先处理低位字节,效率比较高,因为计算机都是从低位开始的,所以计算机内部处理都是小端字节序。但是我们平常读写数值的方法,习惯用大端字节序,所以除了计算机的内部,其他场景大都是大端字节序,比如:网络传输和文件储存时都是用的大端字节序。

小端序(Little Endian):低位字节在低地址,高位字节在高地址。

大端序(Big Endian):高位字节在低地址,低位字节在高地址。

字节序取决于什么?

其实大小端主要由CPU决定,与编程语言、编译器、操作系统这些没有直接关系。

大小端是用于存储的顺序,与存储器(硬件)关系比较大,编译器和操作系统仅仅是配合CPU编译好相应的代码,而不是决定大小端的因素。

一般来说,x86系列CPU都是Little-endian字节序,PowerPC通常是Big-endian字节序。

查看golang整型是大端还是小端?

在 Intel i5 CPU 上执行:

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	isLit := IsLittleEndian()
	fmt.Printf("%t\n", isLit)
}

func IsLittleEndian() bool {
	var value int32 = 1
	pointer := unsafe.Pointer(&value)
	pb := (*byte)(pointer)
	if *pb == 1 {
		return true
	}
	return false
}

输出:

true

--end--

你可能感兴趣的:(golang,golang,后端)