笔记,如何区分大端、小端?

大端、小端问题叫做“字节序”问题,单字节没有这个问题。
然后说多字节。不同的计算机厂商没有达成一致,有些厂商储存0x1234是先存12再存34,有些厂商则反过来。如何记忆呢?
找到标准很重要。所有计算机厂商储存字符串的方式是一样的:储存字符串"abcd",在地址低的地方储存a,在地址高的地方储存d,阅读一个字符串,是沿着地址增加的方向进行的。对应到程序里,就是指针p++,这一点没有幺蛾子出现。
现在就可以区分大端、小端了。沿着地址增加的方向看,先显示高位数字的是大端,先显示低位数字的是小端。
x86、龙芯CPU都是小端。
互联网、GB2312、都是大端。
举例:
一个int型变量a的值是1,在内存中占用4字节。沿着地址增加的方向看,它的值是:01 00 00 00,这是小端。注意,字节内部没有字节序问题,所以,不要一股脑地写成10 00 00 00。
GB2312编码的“啊”是0xB0A1,沿着地址增加的方向看,就是B0和A1,这是大端。
查看Python源代码,发现它的大整数是小端。这么一来,若一个大整数由3个unsigned int表示,则个位数在地址偏移量为0的地方。它不是十进制,也不是二进制,而是232进制。更高的位在地址偏移量更大的地方,这么设计编程会容易点儿。
总结:
以上就是关于大端、小端问题的笔记,希望能够帮助到你。

<think>好的,用户想了解STM32的字节序是大端还是小端。首先,我需要回忆一下大端小端模式的定义。大端模式是指数据的高字节存储在低地址,而低字节存储在高地址;小端模式则相反,低字节在低地址,高字节在高地址。根据之前学过的知识,常见的处理器如x86和ARM通常是小端模式,但STM32属于ARM架构,可能需要确认具体型号的情况。 接下来,我需要查阅用户提供的引用内容。引用[3]提到,KEIL MDK中的变量是小端模式,而STM32通常使用MDK作为开发环境,这可能暗示STM32是小端。引用[5]中的代码示例也说明通过检查内存中的字节顺序可以验证,如果低地址存储的是数据的低位部分,就是小端模式。此外,引用[4]中的例子说明,如果0x78存储在低地址,就是小端,而STM32可能属于这种情况。 另外,ARM架构默认是小端模式,但有些处理器支持切换,不过STM32通常是固定的小端模式。用户提供的引用中没有提到STM32支持大端,因此可以推断STM32是小端字节序。不过需要确认是否有例外情况,比如某些特定型号可能不同,但大多数情况下都是小端。 最后,总结这些信息,给出明确的答案,并建议用户通过代码验证,确保准确性。</think>### STM32的字节序类型 STM32微控制器采用**小端模式(Little-Endian)**作为其默认的字节序。以下从定义、验证方法和具体应用场景进行说明: #### 1. 字节序的定义 - **大端模式(Big-Endian)**:数据的高字节存储在内存的低地址,低字节存储在高地址。例如,数值$0x12345678$在内存中的存储顺序为:$0x12, 0x34, 0x56, 0x78$(地址递增)[^2][^3]。 - **小端模式(Little-Endian)**:数据的低字节存储在内存的低地址,高字节存储在高地址。例如,数值$0x12345678$的存储顺序为:$0x78, 0x56, 0x34, 0x12$(地址递增)[^4][^5]。 #### 2. STM32的字节序验证 STM32基于ARM Cortex-M内核,其默认字节序为小端模式。可通过以下代码验证: ```c #include <stdint.h> uint32_t value = 0x12345678; uint8_t *ptr = (uint8_t *)&value; // 若ptr[0] == 0x78,则为小端模式 // 若ptr[0] == 0x12,则为大端模式 ``` 根据测试结果,STM32中`ptr[0]`的值为$0x78$,表明其为小端模式。 #### 3. 应用场景与注意事项 - **数据传输**:在通信协议(如UART、SPI)中需注意字节序转换,尤其是与外部大端设备交互时。 - **内存映射**:直接操作外设寄存器时,需确保数据写入顺序符合硬件预期[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值