雪绒花竖笛教程:htonl(),htons(),inet_addr(),inet_ntoa()函数_
来源:百度文库 编辑:偶看新闻 时间:2024/04/25 19:04:42
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位数。
注释:
本函数将一个16位数从主机字节顺序转换成网络字节顺序。
返回值:
htons()返回一个网络字节顺序的值。
参见:
htonl(), ntohl(), ntohs().
---------------------------------------------
简单地说,htons()就是将一个数的高低位互换
(如:12 34 --> 34 12)
VB表示:
MsgBox Hex(htons(&H1234))
显示值为 3412
inet_addr()
简述:将一个点间隔地址转换成一个in_addr。#include
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处理器的字节是从右向左排列的。
请注意:只有Berkeley支持下述表达法,Internet其余各处均不支持。考虑到与软件的兼容性,应按规定进行使用。
对一个三部分地址,最后一部分解释成16位数据并作为网络地址的最右两个字节。这样,三部分地址便很容易表示B组网络地址,如“128.net.host”.
对一个两部分地址,最后一部分解释成24位数据并作为网络地址的最右三个字节,这样,两部分地址便很容易表示C组网络地址,如“net.host”。
对仅有一个部分的地址,则将它的值直接存入网络地址不作任何字节的重组。
返回值:
若无错误发生,inet_addr()返回一个无符号长整型数,其中以适当字节顺序存放Internet地址。如果传入的字符串不是一个合法的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 = D<<24 + C<<16 + B<<8 + A(网络字节序),即inet_addr(const char *)的返回结果
另外,我们也可以得到把该IP转换为主机序的结果,转换方法一样
A<<24 + B<<16 + C<<8 + D
inet_ntoa()
简述:将网络地址转换成“.”点隔的字符串格式。
#include
char FAR* PASCAL FAR inet_ntoa( struct in_addr in);
in:一个表示Internet主机地址的结构。
注释:
本函数将一个用in参数所表示的Internet地址结构转换成以“.” 间隔的诸如“a.b.c.d”的字符串形式。请注意inet_ntoa()返回的字符串存放在WINDOWS套接口实现所分配的内存中。应用程序不应假设该内存是如何分配的。在同一个线程的下一个WINDOWS套接口调用前,数据将保证是有效。
返回值:
若无错误发生,inet_ntoa()返回一个字符指针。否则的话,返回NULL。其中的数据应在下一个WINDOWS套接口调用前复制出来。
测试代码如下
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 : %s\n", inet_ntoa(addr1), inet_ntoa(addr2)); //注意这一句的运行结果
printf("%s\n", inet_ntoa(addr1));
printf("%s\n", inet_ntoa(addr2));
return 0;
}
实际运行结果如下:
192.168.0.74 : 192.168.0.74 //从这里可以看出,printf里的inet_ntoa只运行了一次。
192.168.0.74
211.100.21.179
inet_ntoa返回一个char *,而这个char *的空间是在inet_ntoa里面静态分配的,所以inet_ntoa后面的调用会覆盖上一次的调用。第一句printf的结果只能说明在printf里面的可变参数的求值是从右到左的,仅此而已。
参见:
inet_addr().
类别:vc_编程开发 | | 添加到搜藏 | 分享到i贴吧 | 浏览(394) | 评论 (0) 上一篇:网络字节序与主机字节序 下一篇:类似于QQ游戏百万人同时在线的服... /**/相关文章: • ntohs, ntohl, htons,htonl inet... • htonl() htons()及inet_ntoa() i... • htonl() htons()及inet_ntoa() • TCP/IP网络字节顺序转换函数hton... • htons htonl ntohs ntonl • htons(), htonl(), ntohs(), nto... • htons htonl ntohl ntohs 的区别... • htonl,htons 和 ntohs相关问题 最近读者: beck17 cui_chen chinese_cp xuchang1032 DemonVergil xin_light 943654893 luxiaoyu_sdc 网友评论:
"); //-->
inet芯片组
VB中的Inet控件属性
vb中inet控件问题
vb中inet控件问题!!!
vb inet控件上传数据
vb中的inet控件问题
通过INET控件,怎样设置ASCII类型?
有谁知道怎样立即结束Inet控件?
VB中INET如何 判断OpenURL 完成
INET控件读取网页框架的问题!
VB的Inet如何实现FTP上传
Inet控件的State分别是什么意思?
Inet控件的State分别是什么意思???
Inet控件的State分别是什么意思?
Inet控件的State分别是什么意思?
VB中inet控件连接超时除错问题。
如何用inet控件检测网络文件是否存在
Winsock控件和INET控件用什么不同???
vb中inet控件问题!急!急急急急
VB inet下载文件缓存占用太大了怎么办?
inet控件如何做连接超时除错处理?
inet 控件 put get 是否支持通配符,多文件?
inet控件如何获得图片文件的属性
VB中Inet控件下载文件的问题