主机字节序和网络字节序
来源:互联网 发布:网络二合一防雷器 编辑:程序博客网 时间:2024/06/13 09:43
字节序分为大端字节序和小端字节序。大端字节序是指一个整数的高位字节(23~31bit)存储在内存的低地址处,地位字节(0~7bit)存储在内存的高地址处。小端字节序则相反,整数的高位字节存放在内存的高地址处,低位字节存放在内存的低地址处。如下图所示:
那么,如何判断是大端字节序还是小端字节序呢?
bool IsLittle(){ short a=1; return *(char*)&a == 1;}
bool IsBig(){ union { short a; short b; }ua; ua.a=1; return ua.b != 1;}
现代PC大多采用小端字节序,因此小端字节序又被称为主机字节序。当数据在两台使用不同字节序的主机之间进行数据传递时,必然会发生错误。解决办法是:发送端总要把发送的数据转化成大端字节序再发送,而接收方知道传过来的是大端字节序,根据自身采用的字节序进行转换。因此,大端字节序也称为网络字节序。
Linux提供了4个函数完成主机字节序和网络字节序的转化:
#include<netinet/in.h>
unsigned long int htonl(unsigned long int hostlong);
unsigned short int htons(unsigned short int hostshort);
unsigned long int ntohl(unsigned long int netlong);
unsigned short int ntohs(unsigned short int netshort);
htonl表示“host to network long”,即将长整型的主机字节序转换成网络字节序数据,以此类推。长整型函数通常用来转换IP地址,短整型函数用来转换端口号。
阅读全文
0 0
- 网络字节序和主机字节序
- 网络字节序和主机字节序
- 网络字节序和主机字节序
- 网络字节序和主机字节序
- 网络字节序和主机字节序
- 网络字节序和主机字节序
- 主机字节序和网络字节序
- 网络字节序和主机字节序
- 网络字节序和主机字节序
- 网络字节序和主机字节序
- 网络字节序和主机字节序
- 网络字节序和主机字节序
- 网络字节序和主机字节序
- 主机字节序和网络字节序
- 网络字节序和主机字节序
- 主机字节序和网络字节序
- 网络字节序和主机字节序
- 主机字节序和网络字节序
- 一分30秒 kali 开机显示 a start job is running for dev-disk 处理
- Mapreduce shuffle
- java的bigdecimal类型,你真的懂吗?
- 基于webpack+Vue2.0搭建webapp(vue-cli原理)
- 导入了一个项目一直报java.lang.IllegalArgumentException异常
- 主机字节序和网络字节序
- 【Book】知道做到
- 通过jq来监听input的输入状态,实现角标的显示/隐藏
- 问题 A: 日期差值
- java编程思想 第4章 练习9
- iterator在struts2中无法体现效果的原因+form表单提交乱码的原因可能
- Ubuntu 16.04下搭建nfs服务器
- 算法岗位应该掌握的知识
- arcgis 中 等高线如何与卫星影像叠加配准