大端、小端模式,网络字节序,多字节字符、Unicorn字符存储
来源:互联网 发布:淘宝网代购服务点利润 编辑:程序博客网 时间:2024/06/06 01:41
《UNXI网络编程》定义:
术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。
小端(低字节数据)存在起始地址(低地址单元),即是小端字节序;大端存在起始地址,即是大端字节序。
也可以说:
1.小端法(Little-Endian) :高字节数据 存放在 高地址单元,低字节数据 存放在 低地址单元。 高高低低
2.大端法(Big-Endian) : 高字节数据 存放在 低地址单元,低字节数据 存放在 高地址单元。 高低低高
如果我们用 OP0 表示一个32位数据的最高字节,用OP3表示一个32位数据的最低字节
那么,对于int整型数据 0x12345678 。有:
OP0 : 0x12
OP1 : 0x34
OP2 : 0x56
OP3 : 0x78
其在内存中的存放顺序为:
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int a = 0x12345678;
- char *pa = (char *)&a;
- for (int i = 0; i < 4; i++)
- printf("0x%x ", *pa++ & 0xff);
- system("pause");
- return 0;
- }
我的小端机器上的结果,如图:
===============================================
网络字节序
我们知道网络上的数据流是字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节?
也就是说,当接收端收到第一个字节的时候,它是将这个字节作为高位还是低位来处理呢?
网络字节序定义:
收到的第一个字节被当作高位看待,这就要求发送端发送的第一个字节应当是高位。
而在发送端发送数据时,发送的第一个字节是该数字在内存中起始地址对应的字节。
可见多字节数值在发送前,在内存中数值应该以大端法存放。
网络字节序说是大端字节序。
比如我们经过网络发送 0x12345678 这个整形,在80X86平台中,它是以小端法存放的,在发送前需要使用系统提供的htonl将其转换成大端法存放,如图所示。
===============================================
MBCS 多字节字符集
对于多字节字符,计算机的存储方式是:
前导字节 存放在 低字节单元
跟随字节 存放在 高字节单元
这样保证了,无论在大端还是小端模式的机器上,读取字符时,前导字节都先于跟随字节被读取,
而我们在编程时一般都对当前字符进行一番判断,如果编码小于128,则当前字符为单字节字符,否则为多字节字符的前导字符,与其后的一个跟随字节一起组合开一个字符
下面是我的验证代码、截图:
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- char *str = "华夏";
- char *pa = str;
- while (*pa)
- printf("0x%x ", *pa++ & 0xff);
- system("pause");
- return 0;
- }
===============================================
Unicode 字符集
Unicode 字符的编码 方式, 小端机上高高低低,大端机上高低低高
下面是我的验证代码、截图:
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- wchar_t str[] = L"0123456789ABCDEF";
- char *pa = (char *)str;
- for (int i = 0; i < sizeof(str); i++)
- printf("0x%x ", *pa++ & 0xff);
- system("pause");
- return 0;
- }
转载自:http://blog.csdn.net/ltag0110rtag/article/details/7465061
- 大端、小端模式,网络字节序,多字节字符、Unicorn字符存储
- 大端、小端模式,网络字节序,多字节字符、Unicorn字符存储
- 大端、小端模式,网络字节序,多字节字符、Unicorn字符存储
- 多字节整数字节序(小端/大端)
- 大端存储和小端存储,网络字节序
- 大端模式、小端模式与网络字节序
- 网络字节序、大端模式、小端模式
- 大端模式小端模式以及网络字节序
- 网络字节序、大端和小端模式
- 探究VC下的_T(""),发现:双字节字符/多字节字符是以小端存储的(至少是在VC2013环境下)
- 多字节字符与宽字节字符
- 多字节字符与宽字节字符
- 网络通信时字节序转换原理与网络字节序、大端和小端模式
- 网络通信时字节序转换原理与网络字节序、大端和小端模式
- 网络通信时字节序转换原理与网络字节序、大端和小端模式 .
- 网络通信时字节序转换原理与网络字节序、大端和小端模式
- 网络通信时字节序转换原理与网络字节序、大端和小端模式
- 网络通信之 字节序转换原理与网络字节序、大端和小端模式
- 交通灯管理系统
- Error "An error occurred while Internet Connection Sharing was being enabled. (null)"
- MPEG压缩中的 I、B、P帧
- 系统调用
- win7下重新安装sql server2008
- 大端、小端模式,网络字节序,多字节字符、Unicorn字符存储
- Protocol Buffer介绍(Java)
- ubantu系统更新后无法从Windows系统引导进入的解决方法
- Caught exception while loading file struts-default.xml - [unknown location]
- CreateThread 函数常见错误 cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long...
- 银行业务调度系统
- HTML表格
- HDU1154求线段在多边形内长度
- 动态创建按钮