笔试面试7 如何判断一个系统的存储方式是大端还是小端
2014-11-06 23:06
666 查看
首先看下大小端的概念吧,我老是会有点乱...
来自百度百科的解释:
大端模式,是指数据的高位保存在内存的低地址中,而数据的低位保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式,是指数据的高位保存在内存的高地址中,而数据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
简单来说,从内存地址增加的方向来说,大端就是先存放高序字节,小端就是先存放低序字节。
例如:0x0102
-------->内存增加的方向------>
地址A------>地址A+1
大端:01 02
小端:02 01
判断方法是利用union的一个特性,那就是里面的变量共享一段内存。
可以定义一个union.
union Test{
short num;//2byte
char c[sizeof(num)];//2byte
} ;
然后存入一个0x0102或者其他数字到test.num中,因为共享内存的原因,可以访问c[1],c[2],查看里面的值来判断大小端。
一个实现是(参照unix网络编程中的一个例子):
或者更简单的是存一个short值,然后取其地址。
——————————————————————————————————————————————————————————————————
//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。
转载请注明出处:http://blog.csdn.net/qq844352155
author:天下无双
Email:coderguang@gmail.com
2014-11-6
于GDUT
——————————————————————————————————————————————————————————————————
来自百度百科的解释:
大端模式,是指数据的高位保存在内存的低地址中,而数据的低位保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式,是指数据的高位保存在内存的高地址中,而数据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
简单来说,从内存地址增加的方向来说,大端就是先存放高序字节,小端就是先存放低序字节。
例如:0x0102
-------->内存增加的方向------>
地址A------>地址A+1
大端:01 02
小端:02 01
判断方法是利用union的一个特性,那就是里面的变量共享一段内存。
可以定义一个union.
union Test{
short num;//2byte
char c[sizeof(num)];//2byte
} ;
然后存入一个0x0102或者其他数字到test.num中,因为共享内存的原因,可以访问c[1],c[2],查看里面的值来判断大小端。
一个实现是(参照unix网络编程中的一个例子):
#include <stdio.h> #include <conio.h> union Test{ short num; char c[sizeof(short)]; }; int main() { union Test t;//C++ 直接声明为Test t即可 t.num=0x0102; if(t.c[0]==1&&t.c[1]==2) printf("大端!\n"); else if(t.c[0]==2&&t.c[1]==1) printf("小端!\n"); else printf("未知!\n"); getch(); return 0; }在Win7 32bit里面用DEV c++运行的结果为:
或者更简单的是存一个short值,然后取其地址。
#include <stdio.h> #include <conio.h> int main() { short int num=0x0201; char *p=# if(*p==0x02) printf("大端!\n"); else if(*p==0x01) printf("小端!\n"); else printf("未知!\n"); getch(); return 0; }测试结果:
——————————————————————————————————————————————————————————————————
//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。
转载请注明出处:http://blog.csdn.net/qq844352155
author:天下无双
Email:coderguang@gmail.com
2014-11-6
于GDUT
——————————————————————————————————————————————————————————————————
相关文章推荐
- 判断电脑系统中一个数是大端存储还是小端
- 如何判断当前环境的存储方式是大端模式还是小端模式?
- 关于大小端的简单介绍以及使用C写一个函数判断当前系统是大端存储还是小端存储
- 写一个程序判断当前系统存储模式是大端还是小端
- C++学习---一道笔试题:测试当前电脑系统是大端存储还是小端存储数据
- 编写程序判断你的电脑存储方式是大端存储还是小端
- 题目:如何判断一个机器是大端还是小端
- 简单的C程序判断系统是大端还是小端方式
- 如何使用程序判断系统是大端还是小端?
- 写一个函数判断系统是大端还是小端
- 写一个函数判断存储空间是大端还是小端
- [笔试题] 如何判断主机是大端还是小端(字节序)
- 如何判断一个机器是大端在前还是小端在前
- 一个函数判断你的计算机是小端存储还是大端存储
- 判断一个机器是大端存储还是小端存储
- 【笔试题】如何判断主机是大端还是小端(字节序)
- 判断一个机器使用的是大端存储还是小端存储
- [笔试题] 如何判断主机是大端还是小端(字节序)
- 面试笔试题4--如何判断主机是大端小端?
- 【编程1】写一个函数判断系统是大端还是小端