大小端模式以及两种判断方法

大小端模式以及两种判断方法大端 高尾端 数据的尾部 低位字节 放在内存的高位地址 小端 低尾端 数据的尾部 低位字节 放在内存的地位地址

基本概念

首先来看某百科定义:

  • 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。
  • 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

这里我们看到其实大端小端就是数据在内存中的存放的字节顺序
其实上面的定义有点儿难以记忆,总感觉很绕,一个我觉得高效的记忆方式就是:

  • 大端:高尾端:数据的尾部(低位字节)放在内存的高位地址。
  • 小端:低尾端:数据的尾部(低位字节)放在内存的地位地址。

之所以出现这样的问题,是因为一个字节是8位,而现在CPU中的寄存器的位数是大于8的(一般来讲,多少位的处理器寄存器就多少位),所以就存在一个从内存中读取数据到寄存器的顺序问题。而不同处理器读取内存的方式不同,所以不同的架构的内存存放也有所不同。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

判断方法

  • 判断方法一:利用联合类型判断
    union类型的主要特点如下:
    • union中可以定义多个成员,union的大小由最大的成员的大小决定;
    • union成员共享同一块大小的内存,一次只能使用其中的一个成员;
    • 对某一个成员赋值,会覆盖其他成员的值;
    • 联合体union的存放顺序是所有成员都从低地址开始存放


所以我们可以定义联合体如下:

//method 1  union bit{ 
   //对齐原则,char与int指向的均是低位地址  int a; char b; }; 

这个时候我们赋值 a = 0x,如果低位字节的b存放的是0x78,则说明是小端模式,若为0x12则为大端模式:

#include  
     union bit{ 
   //对齐原则,char与int指向的均是低位地址  int a; char b; }; int main(){ 
    bit test; test.a = 0x; if(test.b == 0x78)//如果低位地址保存的是1,即低位字节在低位地址,为小端  printf("本机为小端模式\n"); else printf("本机为大端模式\n"); return 0; } 
  • 判断方法二:利用强制类型转换判断
    这种方式需要定义一个字节指针,指向int型的低位地址,因为要用到强制类型转换,故而称为利用强制类型转换的判断方法:

//method 2 void judge(void){ 
    int i = 0x; char *p; p = (char *)&i;//强制类型转换成char*型指针,指向的位置为低位地址  if(*p == 0x78)//低位地址存储的是低位字节,则为小端  printf("本机为小端模式\n"); else printf("本机为大端模式\n"); } 

END

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228999.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午5:42
下一篇 2026年3月16日 下午5:42


相关推荐

  • Intelij的idea和pycharm的使用

    Intelij的idea和pycharm的使用idea 是一个很复杂但是要页很好使用的工具 其集成了很多功能 也觉定了其很多的快捷键 要在使用得过程中总结其好处 1 psvm publicstatic 2 shift f6 重命名 ctrl I 重写接口方法 ctrl 0 重写类方法 crtl f 单词查询 Atl f 打开 File 菜单 3 cmd opt L 规范代码 cmd o

    2026年3月27日
    3
  • OpenClaw本地部署最低硬件要求:从基础到优化的全维度指南-天下数据

    OpenClaw本地部署最低硬件要求:从基础到优化的全维度指南-天下数据

    2026年3月13日
    3
  • 基于Vue项目的富文本vue-quill-editor的使用

    基于Vue项目的富文本vue-quill-editor的使用基于 Vue 项目的富文本 vue quill editor 的使用一 背景最近呢 要做一个项目 后台管理平台要实现一个商品的详情发布 因为马上要做项目了 所以看了其中的一些设计 提前把一些技术要点攻关一下 到时候做项目会得心应手 网上搜了一下 发现 vue quill editor 这款富文本编辑器还挺不错的 在 github 上使用率也比较高 很适合咱们的 vue 项目 话不多说 直接上手了二 Vue Quill Editor 使用 1 简介基于 Quill 适用于 Vue 的富文本编辑器 支持服务端渲染和单页应用

    2026年3月19日
    2
  • UML旅游管理系统「建议收藏」

    UML旅游管理系统「建议收藏」一、需求概述1.1项目概述随着人们的生活质量的逐步提高,外出旅游成为人们生活中不可或缺的一项活动。开发一个旅游管理系统可以为大家提供便捷的途径。系统管理员可以发布和管理旅行路线。旅客可以查询路线,预定路线。1.2用户需求分析分析的系统的参与者有系统管理员、会员、普通用户三个群体。分别对三个群体的需求进行具体分析。系统管理员:管理员作为系统的管理者。需要对线路的数据库进行管理。比如发布新的线路,对不需要的线路进行删除、修改线路的具体信息。对于已经发布的线路,系统管理员可以查看预定的情况。同

    2022年6月12日
    32
  • java与php哪个好_java和php哪个是主流

    java与php哪个好_java和php哪个是主流首先介绍一下我自己,一直在从事教育行业,有十几年的IT培训经验,从干这行起一直到现在,总会有人问你:服务器端开发是学php好还是java好,如果你告诉她(他)学习php好,他(她)会反问,听说php只

    2022年8月3日
    7
  • 建立排序二叉树并中序遍历

    建立排序二叉树并中序遍历分析:中序遍历也叫中根遍历,顾名思义是把根节点放在中间来遍历,其遍历顺序为左子节点–>根节点–>右子节点。方法一:#includeusingnamespacestd;structnode//二叉树结点结构{intdata;node*left;//右子树结点指针n

    2022年7月25日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号