什么是网络字节序,主机字节序
2015-09-10 10:35
495 查看
不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序
最常见的有两种
1. Little endian:将低序字节存储在低地址
2. Big endian:将高序字节存储在低地址【网络字节】
【用函数判断系统是Big Endian还是Little Endian】
bool IsBig_Endian()
//如果字节序为big-endian,返回true;
//反之为 little-endian,返回false
{
unsigned short test = x1122;
if(*( (unsigned char*) &test ) == 0x11)
return TRUE;
else
return FALSE;
}//IsBig_Endian()
网络字节序定义:收到的第一个字节被当作高位看待,这就要求发送端发送的第一个字节应当是高位。而在发送端发送数据时,发送的第一个字节是该数字在内存中起始地址对应的字节。可见多字节数值在发送前,在内存中数值应该以大端法存放。
网络字节顺序采用big endian排序方式。
为了进行转换 bsd socket提供了转换的函数 有下面四个
htons 把unsigned short类型从主机序转换到网络序
htonl 把unsigned long类型从主机序转换到网络序
ntohs 把unsigned short类型从网络序转换到主机序
ntohl 把unsigned long类型从网络序转换到主机序
在使用little endian的系统中 这些函数会把字节序进行转换
在使用big endian类型的系统中 这些函数会定义成空宏
同样 在网络程序开发时 或是跨平台开发时 也应该注意保证只用一种字节序 不然两方的解释不一样就会产生bug.
最常见的有两种
1. Little endian:将低序字节存储在低地址
2. Big endian:将高序字节存储在低地址【网络字节】
【用函数判断系统是Big Endian还是Little Endian】
bool IsBig_Endian()
//如果字节序为big-endian,返回true;
//反之为 little-endian,返回false
{
unsigned short test = x1122;
if(*( (unsigned char*) &test ) == 0x11)
return TRUE;
else
return FALSE;
}//IsBig_Endian()
网络字节序定义:收到的第一个字节被当作高位看待,这就要求发送端发送的第一个字节应当是高位。而在发送端发送数据时,发送的第一个字节是该数字在内存中起始地址对应的字节。可见多字节数值在发送前,在内存中数值应该以大端法存放。
网络字节顺序采用big endian排序方式。
为了进行转换 bsd socket提供了转换的函数 有下面四个
htons 把unsigned short类型从主机序转换到网络序
htonl 把unsigned long类型从主机序转换到网络序
ntohs 把unsigned short类型从网络序转换到主机序
ntohl 把unsigned long类型从网络序转换到主机序
在使用little endian的系统中 这些函数会把字节序进行转换
在使用big endian类型的系统中 这些函数会定义成空宏
同样 在网络程序开发时 或是跨平台开发时 也应该注意保证只用一种字节序 不然两方的解释不一样就会产生bug.
相关文章推荐
- http: get and response格式
- mina的HTTP性能测试
- http下载文件中文文件名在firefox下乱码问题[转]
- Linux中tcp连接数的限制
- HttpSendRequest Post
- 基于Http替补新闻WebService数据交换
- Python处理http请求
- HTTP网络请求
- 利用 Tinyproxy 搭建 HTTP(S) 代理
- 构建网络爬虫?so easy
- 网络通信中关于请求数据、断点续传和写入本地文件
- 【转】TCP/IP协议族
- HTTP协议之ETag字段
- 网络传输笔记 三(网络连接时发生了什么)
- 同步网络通信步骤
- 用nodejs http-server搭建本地服务环境
- UI中的网络请求
- 《TCP/IP详解卷1:协议》——第5章 RARP:逆地址解析协议(转载)
- 《TCP/IP详解卷1:协议》——第4章 ARP:地址解析协议(转载)
- 为ElasticSearch添加HTTP基本认证