通过 Go 语言代码理解大小端模式

Go语言精选

共 1479字,需浏览 3分钟

 ·

2020-08-24 07:53

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言

大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串的存储顺序处理。地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。

小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。这样的存储模式有利于计算机处理数据。

比如对于数据: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 语言底层实现的为小端模式,因为计算机进行计算时,都是从低位开始进行计算的,这样计算效率比较高。而大端模式比较方便用户阅读,比较符合我们的阅读习惯。

本文作者:v824394795

原文链接:https://blog.51cto.com/4075704/2521880


推荐阅读


学习交流 Go 语言,扫码回复「进群」即可


站长 polarisxu

自己的原创文章

不限于 Go 技术

职场和创业经验


Go语言中文网

每天为你

分享 Go 知识

Go爱好者值得关注


浏览 26
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报