网络编程之主机序和网络序

概念
主机序:主机序分大端模式(big-endian)和小端模式(little-endian)。
大端模式就是把数值的高字节内容存放在内存的低地址处,低字节内容存放在高地址处。
小端模式就是把数值的高字节内容存放在内存的高地址处,低字节内容存放在低地址处。
例如数据 int a = 0x12345678,假设存放的内存地址从0x0000开始。
地址 0x0000 0x0001 0x0002 0x0003
大端模式 0x12 0x34 0x56 0x78
小端模式 0x78 0x56 0x34 0x12

网络序:不同主机之间通信所规定的一种通用模式,即大端模式。
主机A-----------------网络序(大端)-----------------主机B
主机A与主机B通信,发出的信息必须是网络序,同理主机B与主机A通信,发出的信息必须是网络序。
因为这样可以避免两主机的主机序不一致而导致的通信故障。

怎么判断主机的主机序
将一个字节的数据和一个整型数据存放于同样的内存开始地址,通过读取整型数据,分析 char 数据在整型数据的高位还是低位来判断 CPU 工作于小端还是 大端模式。

方法一:

int checkCPU()
{
	int num ,*q;
    q = #
	num = 0;
	*(char *)q = 0xff;
     return (num == 0xff)//  num = 0xff 则为小端 ,否则为大端。
}

方法二:

int checkCPU()
{
	union test
	{
		int a;
		char b;
	} c;
	c.a = 1;
	return (c.b == 1);   // c.b=1 则为小端 ,否则为大端。
}

一般来说x86系列的CPU都是小端模式。

主机序与网络序之间的转换

#include <arpa/inet.h> //头文件
uint32_t htonl(uint32_t hostlong); //将uint32_t 型数据的主机序转为网络序
uint16_t htons(uint16_t hostshort); //将uint16_t 型数据的主机序转为网络序
uint32_t ntohl(uint32_t netlong); //将uint32_t 型数据的网络序转为主机序
uint16_t ntohs(uint16_t netshort); //将uint16_t 型数据的网络序转为主机序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值