大端模式与小端模式

摘要:
大小端模式是由机器指令决定的,Intel系列一般是有小端模式,在处理网络传递数据时,特别要注意客户端和服务器所使用的模式。

一、介绍 

超过一个字节的数据在内存中会用几个字节存储,根据数据在内存的存放方式,分大端模式和小端模式。

大端模式是将数据的高位存在内存的低位地址;小端模式而是将数据的高位存在内存的高位地址,以下是十六进制0x12345678在内存地址的两种存储方式(假设数据是按原码存储),0x12345678中,12是高位,78是低位。

大端模式与小端模式第1张

大端模式中把高位(12)存在内存低地址(0x000),而在小端模式中,高位(12)却存在高地址(0x003),所以按字节去读取一个超过一个字节类型的数据时,小端方式将会出错,如图中读int类型的0x12345678将读出为0x78563412。大小端模式是由机器指令决定的,Intel系列一般是有小端模式,在处理网络传递数据时,特别要注意客户端和服务器所使用的模式。

二、查看自己的机器使用的模式

写一个简单的程序可以查看自己的机器是使用大段模式还是小端模式,安刚才的分析,我们只要以字节为单位去读取一个长度超过一个字节的数,看是否与原来的数相同,就可以断定是哪种模式。  

#include <stdio.h>
/**按字节打印start[i]-start[len-1]的数据
*/
void show_byte(char * start,intlen){
    inti;
    for(i=0;i<len;i++)
        printf("%.2x",start[i]);
    printf("\n");
}
intmain(){
    int test = 0x12345678;
    char * pointer = (char*) &test;//强制转换成char*
    show_byte(pointer,sizeof(int));
    return 0;
}

大端模式与小端模式第2张

在我的机器上输出的是78563412,说明是小端模式。

三、在实践中的应用

大小端模式处理不当,会早造成数据乱码,但我目前没碰到这个问题,以后碰到在补上。

免责声明:文章转载自《大端模式与小端模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Xamarin.Forms之布局Taro开发微信小程序的初体验下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#实现短链接生成服务

项目中有一处需求,需要把长网址缩为短网址,把结果通过短信、微信等渠道推送给客户。刚开始直接使用网上现成的开放服务,然后在某个周末突然手痒想自己动手实现一个别具特色的长网址(文本)缩短服务。 由于以前做过socket服务,对数据包的封装排列还有些印象,因此,短网址服务我第一反应是先设计数据的存储格式,我这里没有采用数据库,而是使用2个文件来实现: Url...

Oracle数据库——表的创建与管理

一、涉及内容   1.掌握使用OEM工具创建、修改和删除表。   2.掌握使用SQL语句创建、修改和删除表。   3.掌握使用SQL语句插入、修改和删除数据。   4.理解各种约束的作用,并能够使用OEM工具和SQL命令为表创建各种约束。 二、具体操作 (一)分别使用OEM和SQL语句完成下面的内容。   1.创建表并添加相应的约束。要求:    (1)创...

char和uchar区别

char 是有符号的, uchar(unsigned char)是无符号的! 1、作为字符来表示的话,两者没有什么区别! 2、作为整数来表示的话,由于char是有符号的,于是数值范围为-128~127     而uchar是无符号的,于是数值范围为0~255,在图像处理中表示像素值范围时用的多!...

ws2s函数

std::string ws2s(const std::wstring&str) { char*pElementText; intiTextLen; //wide char to multi char iTextLen = WideCharToMultiByte(CP_ACP, 0, str.c_str(), -1,...

数据对齐

许多计算机系统对数据类型的合法地址做了一些限制,要求某种数据类型对象的地址必须是某个值K(2,4,8)的倍数,这种堆积限制简化形成了处理器和存储器系统之间接口的硬件设计,总之就是为了方便高效的读取数据,于是就有了数据对齐。 struct S1 { char k; double i; char c; }; Sizeof(S1)的...

java之endwith()方法以及正则表达式匹配中文

今天写程序的时候遇到判断需要使用多个if(){}else{}语句,观察了一下需要判断的条件,发现判断的条件可以变为对条件最后几个汉字的判断,就想用正则表达式来对汉字判断,写完后,想到可以用Java中String类的endwith()方法来对汉字实现匹配,例如 String str="世界你好我喜欢编程"; if(str.endwith("编程")){   ...