大小端介绍及检测方法
2017-10-28 21:07
281 查看
大端存储模式:是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中。
小端存储模式:是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
例如:一个十六进制数 0x11223344 在内存中的地址为0x00000000其中,0x44为它的低字节,0x11为它的高字节,那么对于大端模式,0x11,0x22,0x33,0x44的地址分别为0x00000000,0x00000001,0x00000002,0x00000003。
而对于小端模式,它们的地址分别为0x00000003,0x00000002,0x00000001,0x00000000。
我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。
那么如何判断大端还是小端模式?
这里给出了两种解决方案:
1.
2.
总结:方法就是拿出数据的低地址中存储的数判断其是数据的高位还是低位。
小端存储模式:是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
例如:一个十六进制数 0x11223344 在内存中的地址为0x00000000其中,0x44为它的低字节,0x11为它的高字节,那么对于大端模式,0x11,0x22,0x33,0x44的地址分别为0x00000000,0x00000001,0x00000002,0x00000003。
而对于小端模式,它们的地址分别为0x00000003,0x00000002,0x00000001,0x00000000。
我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。
那么如何判断大端还是小端模式?
这里给出了两种解决方案:
1.
//代码1 int cheak() { int a = 1; return (*(char *)&a); //取出整型变量a的地址强制类型转换为字符型再解引用 } int main() { int b = cheak(); if(b == 1) { printf("小端模式\n"); } else if(b == 0) { printf("大端模式\n"); } return 0; }
2.
//代码2 int cheak() { union //共用体共享内存空间,当开辟内存空间时以字节多的为准 { int i; char c; }un; //开辟了四个字节的内存空间 un.i = 1; return un.c; } int main() { int b = cheak(); if(b == 1) { printf("小端模式\n"); } else if(b == 0) { printf("大端模式\n"); } return 0; }
总结:方法就是拿出数据的低地址中存储的数判断其是数据的高位还是低位。
相关文章推荐
- 大端小端模式简单介绍 以及三种检测大小端存储的方法
- 大小端介绍及其检测方法
- 目标检测(2017前)方法介绍
- [caffe]深度学习之CNN检测object detection方法摘要介绍
- 大小端模式介绍及两种检测方式
- C++中内存泄漏的检测方法介绍
- 大小端检测方法(ARM 和linux系统)
- C++中内存泄漏的检测方法介绍
- 动态类型检测介绍及使用方法
- 内存泄露检测方法介绍
- 大小端检测方法(ARM 和linux系统)
- 基于生长的棋盘格角点检测方法--(1)原理介绍 .
- C++中内存泄漏的检测方法介绍
- 鲁大师2015如何生成报告|鲁大师检测电脑报告保存方法介绍
- 基于生长的棋盘格角点检测方法--(1)原理介绍
- C++中内存泄漏的检测方法介绍
- 目标检测最新方法介绍
- 2款Python内存检测工具介绍和使用方法
- 大小端概念及检测方法
- 目标检测最新方法介绍