16.3.1 字节序
(1)概述
1.字节序是一个处理器架构特性,用于指定数据内部的字节如何排序
2.大段:像存储字符串一样,数据的高字节存储在内存的低字节中。
3.小端:与大段相反
4.有的操作系统既可以配置为大端,也可以配置为小端
5.TCP/IP协议栈使用大端字节序
(2)各平台的字节序
---------------------------
操作系统 字节序
---------------------------
FreeBSD8.0 小端
Linux3.2.0 小端
Mac OS X10.6.8 小端
Solaris 10 大端
---------------------------
(3)处理器字节序与网络字节序转换
uint32_t htonl(uint32_t hostint32); // 返回以网络字节序表示的32位整数
uint16_t htons(uint16_t hostint16); // 返回以网络字节序表示的16位整数
uint32_t ntohl(uint32_t netint32); // 返回以主机字节序表示的32位整数
uint16_t ntohs(uint16_t netint16); // 返回以主机字节序表示的32位整数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
/*
测试目的: 测试系统的字节序
测试结果: sys use litter-endian
*/
int main(int argc, char **argv)
{
int a = 0x12345678;
char first = *((char *)&a);
if (first == (char)0x12)
printf("sys use big-endian\n");
else if(first == (char)0x78)
printf("sys use litter-endian\n");
else
printf("ERROR\n");
return 0;
}