IP地址转换:数字与字符串之间的转换

IP地址库中IP地址的保存格式一般有两种,一种是点分十进制形式(192.168.1.1),另一种是数字形式(3232235777)。应用中,经常需要在这两种格式之间做转换。

那么,如何将点分十进制的IP地址转为数字?

IPv4 地址有4个字节,样式如下:
MSB————–LSB
b4 b3 b2 b1

每个字节表示的范围:

  • BYTE4: 4294967296(2*32*)
  • BYTE3: 16777216(2*24*)
  • BYTE2: 65536(2*16*)
  • BYTE1: 256(2*8*)

通用公式:

b4*BYTE3+ b3*BYTE2 + b2*BYTE1 + b1

例如,222.173.108.86
转换方法:
222* BYTE3 + 173* BYTE2 + 108* BYTE1 + 86 =>3735907414

再例如,1.0.1.1
转换方法:
1* BYTE3 + 0* BYTE2 + 1* BYTE1 + 1 =>16777473

简单写一个转换小工具,代码如下:

#include <stdio.h>
#include <stdlib.h>

#define BYT_24  (16777216L)
#define BYT_16  (65536L)
#define BYT_8   (256)


int main(int argc, char* argv[])
{

        if (argc < 5)
        {
                printf("Usage: ip_str2dgt addr4 addr3 addr2 addr1 \neg. ip_str2dgt 192 168 1 1\n");
                return -1;
        }

        int addr4 = atoi(argv[1]);
        int addr3 = atoi(argv[2]);
        int addr2 = atoi(argv[3]);
        int addr1 = atoi(argv[4]);

        printf("addr4:%d, addr3:%d, addr2:%d, addr1:%d\n", addr4, addr3, addr2, addr1);


        long result = addr4*BYT_24 + addr3*BYT_16 + addr2*BYT_8 + addr1;
        printf("The result is %ld\n", result);

        return 0;
}
$ gcc ip_str2dgt.c -o ip_str2dgt
$ ip_str2dgt 192 168 1 1
The result is 3232235777

参考:
http://blog.csdn.net/str999_cn/article/details/33977149

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值