SOCKET 网络字节序与主机字节序及其相互转换

转载 2013年12月02日 13:04:44

主机字节序:整数在内存中保存的顺序

 

两种方式:

Little endian 将低序字节存储在起始地址

Big endian    将高序字节存储在起始地址

 

网络字节序:整数在网络中的发送顺序

标准规定

Big endian   首先发送高位字节

字节序转换函数

htonl: 转换long类型到网络字节序

htons: 转换short类型到网络字节序

ntohl: 转换网络字节序到long类型

ntohs: 转换网络字节序到short类型

inet_addr: 将字符串格式IP转换到网络字节序

inet_ntoa: 将网络字节序格式IP转换到字符串

举例:SOCKADDR_IN中的数据格式

SOCKADDR_IN addr;
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(5120);
addr.sin_family = AF_INET;

该结构体中的成员sin_addr, sin_port使用的是网络字节序

sin_addr:

inet_addr()返回的已经是网络字节序

127.0.0.1 --> 0x7F.00.00.01

-> 01 低位

    00

    00

    7F 高位

sin_port:

5120(0x1400)在内存中的布局是

    00 低位

    14 高位

经过htons处理后

    14 低位

    00 高位

个人理解:重要的是标准

其实这个转换要解决的问题是网络上各个主机中数据类型的兼容问题。

假设有两个主机A和B,A主机采用了LE字节序,B主机采用了BE字节序,

那么整数0x12345678在A主机中的表示是

    低位--------->高位

0x 78    56    34    12

如果不进行字节序变换A将这个数发给B主机时,B主机收到后在的数保存了内存布局,

将这个数解释为 0x78563412 就会出现错误


来源:http://blog.csdn.net/icedmilk/article/details/5336296

网络字节序和主机字节序详解!!!

我们都知道,如今的通讯方式已经趋向与多样化,异构通信(计算机软件(操作系统) +    计算机硬件(内核架构,ARM,x86)不同)也已经很普遍了,如,手机和电脑中的qq进行通信,,, 同时,在计...
  • msdnwolaile
  • msdnwolaile
  • 2016年02月24日 09:52
  • 9554

主机字节序与网络字节序的转换函数:htonl、ntohl、htons、ntohs

原文地址:http://blog.csdn.net/libuding/article/details/5860578 Part 1: htons函数具体解释      在Linux...
  • duhaomin
  • duhaomin
  • 2014年03月30日 18:00
  • 2748

主机字节序与网络字节序的转换过程

主机字节序与网络字节序的转换过程
  • an_tang
  • an_tang
  • 2017年05月29日 17:13
  • 1413

主机字节序(大小端判断)及网络字节序

如有转载,请注明出处。 作者:super_bert@csdn 先上两种判断主机字节序的方法(C描述),再详细解释。 判断原理: 1.Union成员本身是被存放在相同的内存空间中(即共享内存),uni...
  • qq302501035
  • qq302501035
  • 2015年04月20日 15:55
  • 1542

网络字节序和主机字节序相互转换函数

#include unit16_t htons(uint16_t host16bitvalue); uint32_t htonl(uint32_t host32bitvalue); //均返回网络...
  • suhiymof
  • suhiymof
  • 2015年04月20日 17:19
  • 610

网络字节序与主机字节序 和它们之间的相互转换函数

1、网络字节序:是TCP/IP中一种固定好的数据表示格式,它与具体的CPU,操作系统,传输方式无关,从而可以保证数据在不同主机之间传输时能够兼容。 2、主机字节序:即大端(Big Endian)与小端...
  • fendoubasaonian
  • fendoubasaonian
  • 2015年11月01日 23:32
  • 1418

网络字节序、主机字节序

使用TCP/IP协议进行网络应用开发的朋友首先要面对的就是对IP地址信息的处理。IP地址其实有三种不同的表示格式:        1)Ascii(网络点分字符串)-        2) 网络地址(...
  • yuan08shandong
  • yuan08shandong
  • 2015年12月11日 16:34
  • 1075

什么是主机字节序 什么是网络字节序

记得在学习UC中的网络编程时,会经常用到
  • wushao126
  • wushao126
  • 2014年11月11日 18:02
  • 636

Linux网络编程-网络字节序转换

网络字节序: 我们应该已经知晓,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件内部的偏移地址也有大端和小端之分。 同样,网络数据流同样也有大端小端之分。例如...
  • zhongcanw
  • zhongcanw
  • 2017年03月30日 10:52
  • 182

C语言 位序 字节序 和 网络字节序 帧格式

在我们定义结构体时,从上往下,第一个成员占用这个结构体变量的最低地址。从上往下依次累加。当我们定义结构体位域时,也是这样,第一个定义的位字段,占用这个字节中的最低的位地址。最后一个占用高地址。所以说字...
  • yang_chen_shi_wo
  • yang_chen_shi_wo
  • 2015年07月07日 19:09
  • 884
收藏助手
不良信息举报
您举报文章:SOCKET 网络字节序与主机字节序及其相互转换
举报原因:
原因补充:

(最多只允许输入30个字)