1、大小端模式概述
举个例子:0x87 65 43 21 在内存 0x20 00 00 00 中的表示形式。
1)大端模式(Big-Endian):高位字节 排放在内存的 低地址,低位字节排放在内存的高地址。
(其实大端模式才是我们直观上认为的模式,和字符串存储的模式差类似)
低地址 ----------------------------------------------------------------------------------------------------------------> 高地址
内存地址 | 0x20 00 00 00 | 0x20 00 00 01 | 0x20 00 00 02 | 0x20 00 00 03 |
内容 | 0x87 | 0x65 | 0x43 | 0x21 |
2)小端模式(Little-Endian):低位字节 排放在内存的 低地址,高位字节排放在内存的高地址。
低地址 ----------------------------------------------------------------------------------------------------------------> 高地址
内存地址 | 0x20 00 00 00 | 0x20 00 00 01 | 0x20 00 00 02 | 0x20 00 00 03 |
内容 | 0x21 | 0x43 | 0x65 | 0x87 |
2、大小端模式测试验证函数
#include <stdio.h> //库头文件
/**
******************************************************************************
* @brief 主 函数
* @param None
* @return None
* @note 测试CPU大小端模式
******************************************************************************
*/
void main(void)
{
short int tmp;
unsigned char *p;
//** *************************************
tmp = 0x1234;
p = (unsigned char *)&tmp;
if(*p == 0x34)
{
printf("小端模式\r\n"); //最低字节,首先存储低地址。
}
else //(*p == 0x12)
{
printf("大端模式\r\n"); //最高字节,首先存储低地址。
}
}
3、大小端模式优缺点
小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
大端模式 :符号位的判定固定为第一个字节,容易判断正负。
4、常见大小端模式
类别 | 大小端 |
---|---|
操作系统 | 小端 |
通讯协议 | 大端 |
CPU | 大小端 |
---|---|
PowerPC、IBM、Sun | 大端 |
x86、DEC | 小端 |
ARM | 可小端,也可大端 |
STM32单片机 | 小端 |
C51单片机 | 大端 |
文件格式 | 大小端 |
---|---|
Adobe PS | 大端 |
DXF(AutoCAD) | 可小端,也可大端 |
BMP | 小端 |
GIF | 小端 |
JPEG | 大端 |
MacPaint | 大端 |
RTF | 小端 |
5、大小端模式转换
https://blog.csdn.net/weixin_46672094/article/details/122524919