1.前言
1.1声明
文章中的文字可能存在语法错语以及标点错误,请谅解;
如果在文章中发现代码错误或其它问题请告知,感谢!
2.大小端的概念
2.1大端模式(Big-endian)
数据的高字节保存在内存的低地址中,数据的低字节保存在内存的高地址中,称为大端模式。
例如:32位存储系统中的大端模式,数据在内存中的存储如下图:
2.2小端模式(Little-endian)
数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,称为小端模式。
例如:32位存储系统中的小端模式,数据在内存中的存储如下图:
2.3大小端的总结
高字节在前为大端模式。
低字节在前为小端模式。
大端模式和小端模式没有优劣之分,大小端模式都有适用范围。在存储以及读取一定要按照相同的大小端模式进行,否者会出现数据解析错误。个人建议在进行数据存储的时候使用printf()函数将所有要存储的内容按字节打印出来,在数据读取后也使用prinf()函数将读取的内容按字节打印出来,这样就很容易看出是否读取存储有出入。
另外,很多公司的笔试题会有编写测试机器大小端的函数内容。
3.大小端判断方法
3.1使用联合体来测试机器的大小端
#include<stdio.h> union test { int a; char b; }TEST; int main(void) { int i = 0; i = 1; TEST.a = i; if(1 == TEST.b) { printf("小端模式\n"); } else { printf("大端模式\n"); } return 0; }
3.2使用指针来测试机器的大小端
#include<stdio.h> char* test(void) { int a = 1; char* b = (char *)(&a); return b; } int main(void) { char* p = test(); if (0x01 == *p) { printf("小端模式\n"); } else { printf("大端模式\n"); } return 0;
以上。
参考文档:
http://blog.csdn.net/my_heart_/article/details/51702277
https://baike.baidu.com/item/%E5%A4%A7%E5%B0%8F%E7%AB%AF%E6%A8%A1%E5%BC%8F/6750542?fr=aladdin