首页 > 其他分享 >大小端是什么?如何判别?

大小端是什么?如何判别?

时间:2023-02-02 16:33:12浏览次数:47  
标签:小端 判别 如何 地址 test 存放 内存 大小 字节


大小端是什么?如何判别?_大小端

1、 到底什么是大小端呢?

首先我们需要知道,数据是可以存放在内存中的。在计算机系统中,内存的最小存放单元是字节,即一个地址对应一个字节,可以保存一个字节(8Bit)的数据,但是在计算机系统中又不可能全部都是一个字节的存储方式,还有一些8位、16位、32位的系统,它们还会有2个字节、4个字节的变量。所以就有了数据在内存中存放顺序的说法,也就是大小端的由来。

下面举个例子说明一下大小端的原理。

比如现在有一个由2个字节组成的16位整数0x1234,那么它在内存中存放的方式就有:

(1)  将高字节0x12存放在高地址的位置,而将低字节0x34存放在低地址的位置;

(2)  将高字节0x12存放在低地址的位置,而将低字节0x34存放在高地址的位置;

(1)、(2)的演示如下图所示:

大小端是什么?如何判别?_大小端_02

在上图中,(1)的存放方式就是小端,(2)的存放方式就是大端。

再比如,现有一32位int型数0x12345678,假设其MSB(Most Significant Byte,最高有效字节)为0x12,其LSB (Least Significant Byte,最低有效字节)为0x78,在CPU内存中有两种存放方式,如下:

大小端是什么?如何判别?_大小端_03

综上所述,总而言之:

大端:是高字节数据存放到内存的低地址,低字节数据存放在内存的高地址;
小端:是高字节数据存放到内存的高地址,低字节数据存放在内存的低地址;

2、如何确定CPU的大小端模式?

当我们在写代码的时候,不知道当前环境是用大端模式还是小端模式时,有时候我们使用一些数据结构的时候,在赋值的时候就会导致赋值出错,所以需要检测当前系统的大小端,方便我们写代码的时候安排数据结构的写法。

对于大小端的判断,当你知道了大小端的原理之后,其实就很简单去验证了,写个代码段就可以测试出来。

我个人觉得判断大小端最简单的办法是利用共用体的共享内存空间的机制进行判断,另外用指针也是很方便的,这两者大同小异,分别如下:

(1)使用共用体

typedef union
{
int a;
char b;
}test;

// 给a赋值
test.a = 0x12345678

// 判断b的值
print(test.b) // 如果test.b=0x12说明是大端,如果test.b=0x78说明是小端


(2)使用指针的方式

int a = 0x12345678;
char *b = (char *)(&a); // 指针方式其实和共用体的本质很像

if(0x78 == *b)
小端模式;
else if(0x12 == *b)
大端模式;



大小端是什么?如何判别?_大小端_04

标签:小端,判别,如何,地址,test,存放,内存,大小,字节
From: https://blog.51cto.com/wangjunlv/6033732

相关文章

  • DNS 是如何影响你冲浪速度的?网络干货
    “在日常上网过程中,出于好记的原因,人们更喜欢在浏览器中输入网站的域名​,而不是IP地址。比如想要访问百度,则会输入www.baidu.com,而不是202.108.22.5(或者百度网站的其他......
  • 如何提高前端性能——字体篇
    前言有时候前端开发需要使用到一些特殊字体,但宿主机上一般都没有安装相应的字体,所以需要将字体文件与前端代码一起打包以及用CSS定义使用。本文主要是想回答一个问题:在......
  • Python字符串如何转为bytes对象
    1,字符串转换byte字节指的是计算机上面用来表示存储值的一种计量单位,但是它放在python里面的话就是一种数据类型,这个数据类型的名称为bytes。可以将其看做是二进制字节格......
  • tkinter bind command add_command函数中避免变量全局化的坑如何避免!!!!!!!!!!!!!神
    foriinrange(10):b=tkinter.Button(frame,bg=colorlist[i],font=fffff,text=labellist[i],command=lamdax:func(x))    b.pack()这种写法你会发现......
  • java的BigDecimal比较大小
    BigDecimala=newBigDecimal(10);BigDecimalb=newBigDecimal(2);if(a.compareTo(b)==0){System.out.println("a等于b");}if(a.compareTo(b)==1){......
  • 自动化运维:如何构建和部署前端应用
    在这篇文章中,我将向您展示如何管理依赖项以及使用Gulp构建前端应用程序,并将其安全地部署到服务器。前端部署不再那么简单了回想过去,一切都很简单:你只需将HTML上传到服务......
  • 让你深夜emo的“网抑云”,是如何做产品设计的?
    ​​网易云音乐​​作为国内首个以“歌单”为核心架构的音乐APP,有的人喜欢它的热评,有的人却觉得它的版权太少,虽然网易云音乐不是曲库最丰富的听歌软件,但绝对是听歌软件里情......
  • 自动化运维:如何构建和部署前端应用
    在这篇文章中,我将向您展示如何管理依赖项以及使用Gulp构建前端应用程序,并将其安全地部署到服务器。前端部署不再那么简单了回想过去,一切都很简单:你只需将HTML上传到服务器,可......
  • 企业级分布式监控WGCLOUD - 如何关闭某个主机的告警提醒
    有时候我们对某个服务器临时进行维护,需要关机那么我们告警就会提示主机已经下线了,那么如何关闭这个提示呢我先写两个常用的方法,选择一种即可:1.直接在主机列表删除该主机......
  • 暖通CAD设计中如何计算排烟?机械防烟系统应用实例
    在暖通CAD设计过程中,如果想要快速计算排烟该如何操作呢?本节暖通CAD设计教程就和小编一起来了解一下浩辰CAD暖通软件中通过调用机械防烟系统来快速计算排烟的具体操作步骤吧......