go语言中大小端模式的个人理解

2021-04-01 15:26

阅读:516

标签:字符串   Go语言   必须   const   else   定义   func   int   代码   

大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据
当作字符串的存储顺序处理。地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有
效地结合起来,高地址部分权值高,低地址部分权值低。这样的存储模式有利于计算机处理数据。
比如对于数据:0x12345678,从高字节到低字节为:12345678,从低字节到高字节为:78563412。
按照大端模式从低位buf[0]到高位buf[3]则应该为: 12, 34, 56, 78。
按照小端模式从低位buf[0]到高位buf[3]则应该为: 78,56,34,12。

现在用代码测试一下go语言是小端模式还是大端模式。

package main

import (
"fmt"
"unsafe"
)

func main(){
var i int = 0x12345678 //定义数据
const size int=int(unsafe.Sizeof(i)) //获取i的长度,
ps:=(*[size]byte)(unsafe.Pointer(&i)) //此处size必须为const类型,不然会报错

 fmt.Printf("%T\n",ps)   //*[8]byte类型
 fmt.Println(*ps)//打印值
    //打印存储地址
fmt.Println(&ps[0])
fmt.Println(&ps[1])
fmt.Println(&ps[2])
fmt.Println(&ps[3]) 
if ps[0] == 0x78 {
    //小端模式则ps[0]低位存放的是低字节0x78,十进制则为120,  满足低位存放低字节,    存储为  0x78563412不利用阅读,但方便计算机进行运算。
    fmt.Println("系统为小端模式")
} else {
  //大端模式则ps[0]低位存放的是高字节12,十进制为18,满足低位存放高字节,存储为ox12345678,方便阅读,但不方便计算机进行运算
    fmt.Println("系统为大端模式")
}

}

运行结果:

*[8]uint8
[120 86 52 18 0 0 0 0]
0xc00000a0f8
0xc00000a0f9
0xc00000a0fa
0xc00000a0fb
系统为小端模式

总结:

go语言底层实现的为小端模式,因为计算机进行计算时,都是从低位开始进行计算的,这样计算效率比较高。
而大端模式比较方便用户阅读,比较符合我们的阅读习惯。

go语言中大小端模式的个人理解

标签:字符串   Go语言   必须   const   else   定义   func   int   代码   

原文地址:https://blog.51cto.com/4075704/2521880


评论


亲,登录后才可以留言!