现在的位置: 首页 > 综合 > 正文

关于主机字节和网络字节的转换方法和理解

2013年12月31日 ⁄ 综合 ⁄ 共 1128字 ⁄ 字号 评论关闭

ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.WIN32COM.v10.en/winsock/winsock/ntohl_2.htm

详细查看上面的msdn上解释

首先是我们在socket编程中经常要涉及端口号啊,IP地址啊,就会涉及主机字节和网络字节的转换,

而这里一般来说端口号是16位的,IP地址是32位的,但msdn提供了4个转换函数,分别用于16 和32位的网络地址和主机地址的转换。

他们是ntohl(u_long),ntohs(u_short),htonl(u_long),htons(u_short)4种,让我们来看下函数名的意义,

n  代表  tcp/ip network byte order

h  代表  host byte order (which is little-endian on Intel processors).

s  代表  u_short

l   代表  u_long

to自然代表转换的意思啦~~

 

 

inet_addr()

  简述:将一个点间隔地址转换成一个in_addr。
  #include <winsock.h>
  unsigned long PASCAL FAR inet_addr( const struct FAR* cp);
  cp:一个以Internet标准“.”间隔的字符串。
  注释:
  本函数解释cp参数中的字符串,这个字符串用Internet的“.”间隔格式表示一个数字的Internet地址。返回值可用作Internet地址。所有Internet地址以网络字节顺序返回(字节从左到右排列)。
  Internet地址用“.”间隔的地址可有下列几种表达方式:
  a.b.c.d,a.b.c,a.b,a
  当四个部分都有定值时,每个都解释成一个字节数据,从左到右组成Internet四字节地址。请注意,当一个Internet地址在Intel机器上表示成一个32位整型数时,则上述的字节为“d.c.b.a”。这是因为Intel处理器的字节是从右向左排列的。

inet_ntoa()

  简述:
  将网络地址转换成“.”点隔的字符串格式。
  #include <winsock.h>
  char FAR* PASCAL FAR inet_ntoa( struct in_addr in);
  in:一个表示Internet主机地址的结构。
  注释:
  本函数将一个用in参数所表示的Internet地址结构转换成以“.” 间隔的诸如“a.b.c.d”的字符串形式。请注意inet_ntoa()返回的字符串存放在WINDOWS套接口实现所分配的内存中。应用程序不应假设该内存是如何分配的。在同一个线程的下一个WINDOWS套接口调用前,数据将保证是有效。

抱歉!评论已关闭.