大小端模式以及两种判断方法
文章目录
- 基本概念
- 判断方法
- 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
大小端模式以及两种判断方法相关推荐
- PPT“放映模式”的两种设置方法
做好的PPT文件要如何放映呢?下面来说说设置PPT放映模式的两种方法. 方法一,直接在PPT文件里设置播放幻灯片. 1.打开PPT后,点击菜单栏[幻灯片放映]选项下的[设置幻灯片放映]. 2.弹出对话 ...
- 大端模式与小端模式的理解以及判断方法
1. 为什么会有大端模式和小端模式 在计算机中,我们知道数据是按照字节存储的,如果数据都是单字节存储,就不涉及存储顺序的问题.但是,大多数情况下,数据不是按照单字节的方式存储的,例如会有类似于int, ...
- 大小端模式的判断方法
1. 大小端模式 大端模式:数据的高字节存储在内存的低地址中. 小端模式:数据的低字节存储在内存的低地址中. 两种模式的区别就是数据在内存中是先存储高字节还是低字节,先存高字节就是大端模式,先存低字节 ...
- 大小端模式的快速判断方法
*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...
- 大端小端存储模式详解及判断方法
文章目录 大小端模式的概念 两种模式出现原因 两种模式的优劣 大小端的应用情景 判断机器的字节序 大小端模式的概念 当我们查看数据在内存中的存储情况时,我们经常会发现一个很奇怪的现象,什么现象呢? i ...
- 刷题日记【第四篇】-笔试必刷题【Fibonacci数列+合法括号序列判断+两种排序方法+求最小公倍数】
目录 选择题模块 1. 以下对继承的描述错误的是(A) 2. 在Java中,一个类(B) 3. 以下不是Object 类的方法的是(D) 4. Test.main() 函数执行后的输出是(D) 编程题 ...
- 【字符串2】(删除公共字符、合法括号序列判断、两种排序方法、密码强度等级)
字符串题集 1. 删除公共字符 题目描述 题目分析 C++代码 2. 合法括号序列判断 题目描述 题目分析 C++代码 3. 两种排序方法 题目描述 题目分析 C++代码 4. 密码强度等级 题目描述 ...
- 用两种遍历方法判断图中两点是否有路径
用两种遍历方法判断图中两点是否有路径(可直接测试) 邻接表.图.图的两种遍历以及图中路径的基本概念,可以去自行了解和学习(下面是代码实践)可直接在自己主机测试 #include <iostrea ...
- 判断cpu大小端模式(c++代码实现)
首先来了解一下大小端模式. 大端模式:高位对应低地址,低位对应高地址 :换而言之,就是数字的高位存放在内存的低址地,低位存放在内存的高地址 小端模式:高位对应高地址,低位对应低地址 :即数字的高位存放 ...
最新文章
- VS2010创建ATL类时需要手动填写ProgID
- SD-WAN — 企业 WAN 技术演进
- Hadoop的搭建,VmwareWorkstation 16pro + Ubuntu18.04.1
- Linux 系统下载和安装 rarlinux
- python列表转字节_如何在Python中将十进制数转换为字节列表
- c mysql使用场景_Mysql 场景
- [VSTO系列]二、简单的UI设计/QQ联系人导出(上)
- Java比较两个对象属性值变化情况,用于记录日志使用
- pytorch与Keras对应模型Sequential()和add()
- 3.30作业(采购管理+信息管理)
- Atitit 自然语言处理原理与实现 attilax总结
- SCSA网络安全----信息安全概述
- diskgenius分区linux选哪项,DiskGenius和和傲梅分区助手哪个好 无损C盘扩容选谁
- 华为畅享20为什么没有计算机,华为畅享20 Pro强势来袭:即刻5G,不等待
- 形容词和指示代词-this、that、thses、those_31
- 如何在电脑上运行模拟器
- 应用程序正常初始化(0xc0150002)失败的终极解决方案
- 南阳理工学院ACM多乐赛暨16级退役纪念赛 A 食堂的座位
- lotus系统可以再linux下运行吗,IBM Lotus Notes 8.5 在 MAC 和 Linux 系统安装的新特性
- idea 取消自动保存
热门文章
- 线性表顺序存储结构图书管理
- php 交换机 密码,华为交换机boot默认密码
- Excel VBA 根据图片名称插入对应图片
- 服务器高危漏洞需要修复吗,Win10被曝新的HTTP协议高危漏洞:需安装KB5003173可彻底修复...
- 微信小程序多层wx:for嵌套的使用
- fsevents@1.2.13: wanted {“os“:“darwin“,“arch“:“any“} (current: {“os“:“win32“,“arch“:“x64“})
- 牛轧糖Android rom,谷歌最新“牛轧糖”系统固件ROM下载—Android 7.0 Nougat正式版
- 【vue2.0进阶】轻松理解Vuex的3个核心概念及简单应用案例(计算器)
- Python人工智能之图片识别
- 利用python将二进制图片转化成图片并展示