字节序相关问题

字节顺序 endian

计算机系统一般采用字节(Octet,8 bit )作为逻辑寻址单位。当物理单位的长度大于1个字节时,就要区分字节顺序。常见的字节顺序有两种:大端Big Endian 和 小端 Little Endian。

大端序:高位字节放到内存的低地址端,低位字节排放在内存的高地址段;  小端序:低位字节存放在内存的低地址段,高位字节排放在内存的高地址段。

判断大端小段(C++):

栈地址的申请是由高到低的!!!

const int endian = 1;
#define is_bigendian()  ((*(char*)&endian) == 0)

#define is_littlendian()  ((*(char*)&endian) == 1)
bool IsLittleEndian()
{
   union
	{
	   int  val;
	   char c;
	}u;
   u.val = 1;
   if(u.c == 1)
   {
	//小端
	return true;
   }
   else
   {
	//大端
	return false;
   }
}

网络字节序(Network Byte Order,NBO)

按照从高到低的顺序存储,在网路上使用统一的网络字节顺序,可以避免兼容性问题。(即为大端序,TCP/IP中使用的字节序)。

主机字节序(HBO ,Host Byte Order)

不同的机器HBO不相同,与CPU设计有关。不同机器之间通信,需要转换为网络字节序来通信。相关转换函数如下:
htonl():将主机字节顺序转化为32位网络字节顺序
ntohl():将网络字节顺序转换为32位主机字节顺序
htons():将一个16位数从主机字节顺序转化为网络字节顺序
ntohs():将一个无符号端整型数从网络字节顺序转换为主机字节顺序

inet_ntoa():将网络地址转换成"."点隔的字符串格式,返回一个字符指针
inet_addr():将IP从点数格式转换成无符号长整型(错误返回-1,与IP地址255.255.255.255相符合)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值