全媒体网站的建设,深圳网站设计+建设首选深圳市,网络规划的内容,科技团队网站什么是大端模式、小端模式#xff1f;
所谓的大端模式#xff0c;是指数据的低位保存在内存的高地址中#xff0c;而数据的高位保存在内存的低地址中#xff1b;
所谓的小端模式#xff0c;是指数据的低位保存在内存的低地址中#xff0c;而数据的高位保存在内存的高地…什么是大端模式、小端模式
所谓的大端模式是指数据的低位保存在内存的高地址中而数据的高位保存在内存的低地址中
所谓的小端模式是指数据的低位保存在内存的低地址中而数据的高位保存在内存的高地址中。 为什么会有大小端
为什么会有大小端模式之分呢大小端存储由 CPU架构 决定。
这是因为在计算机系统中我们是以字节为单位的每个地址单元都对应着一个字节一个字节为8bit。但是在C语言中除了8bit的char之外还有16bit的short型32bit的long型要看具体的编译器另外对于位数大于8位的处理器例如16位或者32位的处理器由于寄存器宽度大于一个字节那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x在内存中的地址为0x0010x的值为0x1122那么0x11为高字节0x22为低字节。对于大端模式就将0x11放在低地址中即0x0010中0x22放在高地址中即0x0011中。小端模式刚好相反。我们常用的X86结构是小端模式而KEIL C51则为大端模式。很多的ARMDSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。
举例
使用大端模式的有Mac OS、PowerPC、IBM、Sun、 TCP/IP网络数据流
使用小端模式的有x86、Linux
而ARM可以是大端模式也可以是小端模式 大小端模式示例
32bit宽的数0x12345678在Little-endian模式以及Big-endian模式CPU内存中的存放方式假设从地址0x4000开始存放为 如何判断CPU是大端模式还是小端模式
判断CPU是大端模式还是小端模式可以通过以下方法 创建一个整型变量将其赋值为0x12345678。将该整型变量的地址强制转换为字符型指针类型。判断该字符型指针类型指向的地址中存储的值如果该值为0x12则为大端模式如果该值为0x78则为小端模式。 代码如下所示
#include stdio.hint main() {int num 0x12345678;char *p (char *)num;if (*p 0x12) {printf(This CPU is big endian.\n);} else if (*p 0x78) {printf(This CPU is little endian.\n);} else {printf(Unknown endian.\n);}return 0;
} 怎么实现大小端模式的转换
其实这个很简单只要进行.整数字节序转换就可以了。 //对应int32大小的成员 的转换 范例
int32_t swapInt32(int32_t value)
{
return ((value 0x000000FF) 24) |
((value 0x0000FF00) 8) |
((value 0x00FF0000) 8) |
((value 0xFF000000) 24) ;
}
后面的竖线是进行或运算改成加号也可以。