CPU的大小端模式?

CPU的大小端模式?

通信协议中的数据传输,阵列的存储方法,数据的强制转换等都将涉及大小问题。 CPU的大尾数模式和小尾数模式在很多地方都使用过,但是仍然有很多不认识的朋友,所以今天就让它流行起来。
1.为什么大端字节模型和小端字节模型之间有区别?因为在计算机系统中,我们以字节为单位,每个地址单位对应一个字节,并且一个字节为8位。但是在C语言中,除了8位字符外,还有16位短类型和32位int类型。
另外,对于具有8位以上的处理器(例如16位或32位处理器),由于寄存器宽度大于一个字节,因此必须存在安排多个字节的问题。这导致了大端存储模型和小端存储模型。
例如,一个16位短类型x,存储器中的地址为0x0010,x的值为0x1122,则0x11为高字节,而0x22为低字节。对于大端模式,将0x11放在低位地址,即0x0010,将0x22放在高位地址,即0x0011。
小尾数模式正好相反。 2.什么是大端和小端?大端模式:意味着数据的高字节存储在存储器的低地址中,数据的低字节存储在存储器的高地址中。
小尾数模式:表示数据的高字节存储在存储器的高地址中,数据的低字节存储在存储器的低地址中。如果从地址0x08004000存储32位宽(uint32_t)数据0x12345678:地址的小端存储内容,大端存储内容0x08004003 0x12 0x78 0x08004002 0x34 0x56 0x08004001 0x56 0x34 0x08004000 0x78 0x12然后与a组合可以理解的图片:从上表可以看出,大头和小头的区别在于存储顺序。
在维基百科中,还有关于“结尾的起源”的段落:3.在大尾数和小尾数的情况下存储数组。以unsigned int值= 0x12345678为例。
让我们看一下两个字节序的存储条件。您可以使用unsigned char buf [4]表示值。
1.在大端模式下,地址数组值的位置为高地址buf [3] 0x78低buf [2] 0x56--buf [1] 0x34-低地址buf [0] 0x12高位2.小​​尾数模式下的地址数组值位置高地址buf [3] 0x12低位buf [2] 0x34--buf [1] 0x56-低地址buf [0] 0x78高位I don&t知道是否要强制将数组转换为整数数据吗?如果要执行强制转换,则必须考虑大小问题。 4.谁在大大小小的方面都更好?小端模式:强制转换数据不需要调整字节内容,1、2、4字节的存储方法相同。
大端模式:符号位的判断固定在第一个字节,这使判断正负变得容易。简介:没有人会在大头和小头上有好有坏。
它们各自的优点是其他缺点。 5.通用字节顺序通用操作系统是小端,通信协议是大端。
1.常见CPU的字节顺序大端模式:PowerPC,IBM,Sun小端模式:x86,DEC ARM可以在大端模式或小端模式下工作。 (内容来自网络)2. STM32属于little-endian模式。
有很多方法可以测试MCU是大端还是小端。您可以通过在线调试打印数据和查看数据:当然,MCU手册中有相关说明。
第六,小端与小端之间的转换首先,在实际应用中,有许多通信协议,数据存储等使用小端与小端。如果字节序不一致,则需要转换。
只要您了解原理(从高到低的顺序),就有很多转换方法,下面简要列出了两种方法。对于16位字数据,向左和向右滑动以查看所有代码。
#define BigtoLittle16(A)(((((uint16)(A)& amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; gt; 8))|((((uint16)(A)& amp; amp; amp; amp; amp; 0x00ff)& lt; < 8))2.对于32位字数据,向左和向右滑动以查看所有代码。 #define BigtoLittle32(A)(((((uint32)(A)& amp; amp; amp; amp; amp; amp; amp; amp; amp; gt; 24))|((((uint32)(A)& amp; amp; amp; amp; amp; 0x00ff0000)& gt; & gt; 8)|((((uint32)(A)& amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; lt; 8)|((((uint32)(A)& amp; amp; amp; amp; amp; amp; 0x000000ff)& lt; & lt; 24))方法很多,感兴趣的朋友可以自己学习。
这是本文的结尾,希望对您有所帮助。 ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧。

深圳市相信过程科技有限公司❤聂经理❤欢迎您的咨询