您的位置:首页 > 其它

ip地址和整数转换

2013-02-10 22:08 253 查看
inet_addr函数

地址转换, 把"A.B.C.D"的IP地址转换为32位长整数

[声明]

unsigned long inet_addr ( const char FAR *cp );

[参数]

cp - 指向IP地址字符串的指针

[返回值]

当函数成功调用时返回用32位整数表示的IP地址

失败时返回INADDR_NONE.

实际是就是一个按位的排列,

比如 A.B.C.D的换成整数就是:

(((A*256)+B)*256+C)*256+D

1409823698 = 540833D2 H => 以字节分解: 54H 08H 33H D2H => 转回10进制: 84 08 51 210

看明白了吗?

就是把每个段分别转为16进制,合并成整型:

1409823698 = (84 shl 24) or (8 shl 16) or (51 shl 8) or 210

合并转为整型后因为最高位可能会是1,所以可能会出来负值,不用管它就行了。

实例:

uses WinSock;

ShowMessage(IntToStr(inet_addr('192.168.0.1')));

整数转化为ip

Vc:

char* DottedDecimal(unsigned long ulAddr)

{

static char szAddr[16] = {0};

unsigned long ulMask[4] = {0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000};

for (int i = 0; i < 4; i++)

{

long l = (ulAddr & ulMask[i]) >> (i * 8);

ltoa(l, szAddr + strlen(szAddr), 10);

if (i != 3)

strcat(szAddr, ".");

}

return szAddr;

}

逆函数,网上查的:

7、将网络地址转换为用点分割的IP地址,是上面函数的逆函数。

char FAR * inet_ntoa( struct in_addr in );

举例:char * ipaddr=NULL;

char addr[20];

in_addr inaddr;

inaddr. s_addr=16777343;

ipaddr= inet_ntoa(inaddr);

strcpy(addr,ipaddr);

这样addr的值就变为127.0.0.1。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: