ip地址和整数转换

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。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值