文章目录

  • 基本概念
  • 判断方法
  • END

基本概念

首先来看某百科定义:

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

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

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

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

下面拿一个例子来说明:
假设我们现在有int型变量 0x12345678:,那么如果是小端模式,即低尾端,数据的低位0x78在内存的低位地址中存放。其在内存的存放方式如下图所示:

若是大端模式,即高尾端,那么数据的低位0x78存在内存中的高位地址。其内存存放方式如下:

判断方法

首先,要强调下不能用移位,位与等运算方式来判断大小端模式:
因为前面提到过,大小端是数据在内存中的字节存放顺序,而运算指令是由CPU执行的,也就是说运算等方法其实是改变的CPU中寄存器的值,而寄存器中的值通过大小端模式已经得到了正确的数据存放顺序。

  • 判断方法一:利用联合类型判断
    union类型的主要特点如下:

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

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

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

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

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

END

大小端模式以及两种判断方法相关推荐

  1. PPT“放映模式”的两种设置方法

    做好的PPT文件要如何放映呢?下面来说说设置PPT放映模式的两种方法. 方法一,直接在PPT文件里设置播放幻灯片. 1.打开PPT后,点击菜单栏[幻灯片放映]选项下的[设置幻灯片放映]. 2.弹出对话 ...

  2. 大端模式与小端模式的理解以及判断方法

    1. 为什么会有大端模式和小端模式 在计算机中,我们知道数据是按照字节存储的,如果数据都是单字节存储,就不涉及存储顺序的问题.但是,大多数情况下,数据不是按照单字节的方式存储的,例如会有类似于int, ...

  3. 大小端模式的判断方法

    1. 大小端模式 大端模式:数据的高字节存储在内存的低地址中. 小端模式:数据的低字节存储在内存的低地址中. 两种模式的区别就是数据在内存中是先存储高字节还是低字节,先存高字节就是大端模式,先存低字节 ...

  4. 大小端模式的快速判断方法

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  5. 大端小端存储模式详解及判断方法

    文章目录 大小端模式的概念 两种模式出现原因 两种模式的优劣 大小端的应用情景 判断机器的字节序 大小端模式的概念 当我们查看数据在内存中的存储情况时,我们经常会发现一个很奇怪的现象,什么现象呢? i ...

  6. 刷题日记【第四篇】-笔试必刷题【Fibonacci数列+合法括号序列判断+两种排序方法+求最小公倍数】

    目录 选择题模块 1. 以下对继承的描述错误的是(A) 2. 在Java中,一个类(B) 3. 以下不是Object 类的方法的是(D) 4. Test.main() 函数执行后的输出是(D) 编程题 ...

  7. 【字符串2】(删除公共字符、合法括号序列判断、两种排序方法、密码强度等级)

    字符串题集 1. 删除公共字符 题目描述 题目分析 C++代码 2. 合法括号序列判断 题目描述 题目分析 C++代码 3. 两种排序方法 题目描述 题目分析 C++代码 4. 密码强度等级 题目描述 ...

  8. 用两种遍历方法判断图中两点是否有路径

    用两种遍历方法判断图中两点是否有路径(可直接测试) 邻接表.图.图的两种遍历以及图中路径的基本概念,可以去自行了解和学习(下面是代码实践)可直接在自己主机测试 #include <iostrea ...

  9. 判断cpu大小端模式(c++代码实现)

    首先来了解一下大小端模式. 大端模式:高位对应低地址,低位对应高地址 :换而言之,就是数字的高位存放在内存的低址地,低位存放在内存的高地址 小端模式:高位对应高地址,低位对应低地址 :即数字的高位存放 ...

最新文章

  1. VS2010创建ATL类时需要手动填写ProgID
  2. SD-WAN — 企业 WAN 技术演进
  3. Hadoop的搭建,VmwareWorkstation 16pro + Ubuntu18.04.1
  4. Linux 系统下载和安装 rarlinux
  5. python列表转字节_如何在Python中将十进制数转换为字节列表
  6. c mysql使用场景_Mysql 场景
  7. [VSTO系列]二、简单的UI设计/QQ联系人导出(上)
  8. Java比较两个对象属性值变化情况,用于记录日志使用
  9. pytorch与Keras对应模型Sequential()和add()
  10. 3.30作业(采购管理+信息管理)
  11. Atitit 自然语言处理原理与实现 attilax总结
  12. SCSA网络安全----信息安全概述
  13. diskgenius分区linux选哪项,DiskGenius和和傲梅分区助手哪个好 无损C盘扩容选谁
  14. 华为畅享20为什么没有计算机,华为畅享20 Pro强势来袭:即刻5G,不等待
  15. 形容词和指示代词-this、that、thses、those_31
  16. 如何在电脑上运行模拟器
  17. 应用程序正常初始化(0xc0150002)失败的终极解决方案
  18. 南阳理工学院ACM多乐赛暨16级退役纪念赛 A 食堂的座位
  19. lotus系统可以再linux下运行吗,IBM Lotus Notes 8.5 在 MAC 和 Linux 系统安装的新特性
  20. idea 取消自动保存

热门文章

  1. 线性表顺序存储结构图书管理
  2. php 交换机 密码,华为交换机boot默认密码
  3. Excel VBA 根据图片名称插入对应图片
  4. 服务器高危漏洞需要修复吗,Win10被曝新的HTTP协议高危漏洞:需安装KB5003173可彻底修复...
  5. 微信小程序多层wx:for嵌套的使用
  6. fsevents@1.2.13: wanted {“os“:“darwin“,“arch“:“any“} (current: {“os“:“win32“,“arch“:“x64“})
  7. 牛轧糖Android rom,谷歌最新“牛轧糖”系统固件ROM下载—Android 7.0 Nougat正式版
  8. 【vue2.0进阶】轻松理解Vuex的3个核心概念及简单应用案例(计算器)
  9. Python人工智能之图片识别
  10. 利用python将二进制图片转化成图片并展示