htonlhtons及inetntoainetaddr的用法

上传人:平*** 文档编号:14370343 上传时间:2017-10-30 格式:DOC 页数:6 大小:43.35KB
返回 下载 相关 举报
htonlhtons及inetntoainetaddr的用法_第1页
第1页 / 共6页
htonlhtons及inetntoainetaddr的用法_第2页
第2页 / 共6页
htonlhtons及inetntoainetaddr的用法_第3页
第3页 / 共6页
htonlhtons及inetntoainetaddr的用法_第4页
第4页 / 共6页
htonlhtons及inetntoainetaddr的用法_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《htonlhtons及inetntoainetaddr的用法》由会员分享,可在线阅读,更多相关《htonlhtons及inetntoainetaddr的用法(6页珍藏版)》请在金锄头文库上搜索。

1、htonl()简述:将主机的无符号长整形数转换成网络字节顺序。#include u_long PASCAL FAR htonl( u_long hostlong);hostlong:主机字节顺序表达的 32 位数。注释:本函数将一个 32 位数从主机字节顺序转换成网络字节顺序。返回值:htonl()返回一个网络字节顺序的值。参见:htons(), ntohl(), ntohs().htons()简述:将主机的无符号短整形数转换成网络字节顺序。#include u_short PASCAL FAR htons( u_short hostshort);hostshort:主机字节顺序表达的 16

2、位数。注释:本函数将一个 16 位数从主机字节顺序转换成网络字节顺序。返回值:htons()返回一个网络字节顺序的值。参见:htonl(), ntohl(), ntohs(). -简单地说,htons()就是将一个数的高低位互换(如:12 34 34 12)VB 表示:MsgBox Hex(htons(&H1234)显示值为 3412inet_addr()简述:将一个点间隔地址转换成一个 in_addr。#include unsigned long PASCAL FAR inet_addr( const struct FAR* cp);cp:一个以 Internet 标准“.”间隔的字符串。注

3、释:本函数解释 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 处理器的字节是从右向左排列的。请注

4、意:只有 Berkeley 支持下述表达法,Internet 其余各处均不支持。考虑到与软件的兼容性,应按规定进行使用。对一个三部分地址,最后一部分解释成 16 位数据并作为网络地址的最右两个字节。这样,三部分地址便很容易表示 B 组网络地址,如“.host”.对一个两部分地址,最后一部分解释成 24 位数据并作为网络地址的最右三个字节,这样,两部分地址便很容易表示 C 组网络地址,如“net.host”。对仅有一个部分的地址,则将它的值直接存入网络地址不作任何字节的重组。返回值:若无错误发生,inet_addr()返回一个无符号长整型数,其中以适当字节顺序存放 Internet 地址。如果传

5、入的字符串不是一个合法的 Internet 地址,如“a.b.c.d”地址中任一项超过 255,那么 inet_addr()返回 INADDR_NONE。参见:inet_ntoa().inet_addr()函数的实现输入是点分的 IP 地址格式(如 A.B.C.D)的字符串,从该字符串中提取出每一部分,转换为 ULONG,假设得到 4 个 ULONG 型的 A,B,C,D,ulAddress(ULONG 型)是转换后的结果,ulAddress = Dchar FAR* PASCAL FAR inet_ntoa( struct in_addr in);in:一个表示 Internet 主机地址的

6、结构。注释:本函数将一个用 in 参数所表示的 Internet 地址结构转换成以“.” 间隔的诸如“a.b.c.d”的字符串形式。请注意 inet_ntoa()返回的字符串存放在WINDOWS 套接口实现所分配的内存中。应用程序不应假设该内存是如何分配的。在同一个线程的下一个 WINDOWS 套接口调用前,数据将保证是有效。返回值:若无错误发生,inet_ntoa()返回一个字符指针。否则的话,返回 NULL。其中的数据应在下一个 WINDOWS 套接口调用前复制出来。测试代码如下include #include #include #include #include int main(int

7、 aargc, char* argv)struct in_addr addr1,addr2;ulong l1,l2;l1= inet_addr(192.168.0.74);l2 = inet_addr(211.100.21.179);memcpy(&addr1, &l1, 4);memcpy(&addr2, &l2, 4);printf(%s : %sn, inet_ntoa(addr1), inet_ntoa(addr2); /注意这一句的运行结果printf(%sn, inet_ntoa(addr1);printf(%sn, inet_ntoa(addr2);return 0;实际运行结果

8、如下:192.168.0.74 : 192.168.0.74 /从这里可以看出,printf 里的 inet_ntoa只运行了一次。192.168.0.74211.100.21.179inet_ntoa 返回一个 char *,而这个 char *的空间是在 inet_ntoa 里面静态分配的,所以 inet_ntoa 后面的调用会覆盖上一次的调用。第一句 printf 的结果只能说明在 printf 里面的可变参数的求值是从右到左的,仅此而已。参见:inet_addr().现在我们很幸运,因为我们有很多的函数来方便地操作 IP 地址。没有 必要用手工计算它们,也没有必要用char FAR*

9、PASCAL FAR inet_ntoa( struct in_addr in);in:一个表示 Internet 主机地址的结构。注释:本函数将一个用 in 参数所表示的 Internet 地址结构转换成以“.” 间隔的诸如“a.b.c.d”的字符串形式。请注意 inet_ntoa()返回的字符串存放在 WINDOWS 套接口实现所分配的内存中。应用程序不应假设该内存是如何分配的。在同一个线程的下一个WINDOWS 套接口调用前,数据将保证是有效。返回值:若无错误发生,inet_ntoa() 返回一个字符指针。否则的话,返回 NVLL。其中的数据应在下一个 WINDOWS 套接口调用前复制出

10、来。参见:inet_addr().测试代码如下include #include #include #include #include int main(int aargc, char* argv)struct in_addr addr1,addr2;ulong l1,l2;l1= inet_addr(192.168.0.74);l2 = inet_addr(211.100.21.179);memcpy(&addr1, &l1, 4);memcpy(&addr2, &l2, 4);printf(%s : %sn, inet_ntoa(addr1), inet_ntoa(addr2); /注意这一

11、句的运行结果printf(%sn, inet_ntoa(addr1);printf(%sn, inet_ntoa(addr2);return 0;实际运行结果如下:192.168.0.74 : 192.168.0.74 /从这里可以看出,printf 里的 inet_ntoa 只运行了一次。192.168.0.74211.100.21.179inet_ntoa 返回一个 char *,而这个 char *的空间是在 inet_ntoa 里面静态分配的,所以inet_ntoa 后面的调用会覆盖上一次的调用。第一句 printf 的结果只能说明在 printf 里面的可变参数的求值是从右到左的,仅此而已。本文来自 CSDN 博客,转载请标明出处:http:/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号