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

    xiaoxiao2021-03-25  62

    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

    转载请注明原文地址: https://ju.6miu.com/read-37201.html

    最新回复(0)