跳转至

大小端字节序

在数据储存中:

  • 数据位 对 地址低位,称为小端模式

  • 数据位 对 地址低位,称为大端模式

STM32 单片机使用小端模式。

引入

有下面代码,问输出是多少

union u8_u16
{
    uint8_t a[3];
    uint16_t b;
};

u8_u16 test;

test.b = 0x66CCFF;

printf("%x,%x,%x", test.a[0], test.a[1], test.a[2]);

上面代码,涉及到了计算机储存数据的方式。答案是不一定。

  1. 如果储存顺序是:
高地址 中地址 低地址
0x66 0xCC 0xFF

那么 a[0] == 0x66,a[1] == 0xCC,a[2] == 0xFF

  1. 但如果是:
高地址 中地址 低地址
0xFF 0xCC 0x66

那么 a[0] == 0xFF,a[1] == 0xCC,a[2] == 0x66

在 0x11FF 中,11 是 “高位”,FF 是 “低位”。

第一种,数据位 对 地址位,称为小端模式。第二种,数据位 对 地址位,称为大端模式

大端和小端

小端模式的优势

小端模式在处理器中具有以下优势:

  • 数据存储方式与内存地址的增长方向一致,便于解析和操作。
  • 在多字节数据的数学运算中,低位字节的优先处理使得计算更加简单。

常见的大小端模式设备

  • 小端模式:STM32、x86架构处理器、ARM(默认小端模式)。
  • 大端模式:STM8、KEIL C51等。

需要注意的是,虽然 ARM 处理器可以支持大端模式,但 STM32 作为 ARM Cortex-M 系列的实现,默认工作在小端模式,且无法通过软件更改其字节序。

应用场景

跨平台通信中,网络协议常用大端,需要进行字节序转换。STM32 在网络通信,常需通过移位运算实现大端。

STM32 处理器采用小端模式,这种模式在嵌入式中非常常见,尤其是在 ARM 架构的设备中。