IP地址转换:数字与字符串之间的转换
来源:互联网 发布:ajax获取servlet中json 编辑:程序博客网 时间:2024/04/30 13:07
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 1The result is 3232235777
参考:
http://blog.csdn.net/str999_cn/article/details/33977149
0 0
- IP地址转换:数字与字符串之间的转换
- ip地址在数字与字符串之间的相互转换
- java IP地址与数字之间的转换
- Java实现IP地址字符串与整数之间的转换
- C# IP地址和整数之间的转换,IP地址和数字ip地址的转换
- IP地址与整数之间的转换
- IP地址与整数之间的转换
- IP地址与整数之间的转换
- IP地址与整数之间的转换
- ip地址与整数之间的转换
- ip地址与整数之间的转换
- 整数与ip地址之间的转换
- 字符串与数字之间的互相转换
- 字符串与数字之间的互相转换
- C++数字与字符串之间的转换
- 字符串与数字之间的转换
- 字符串与数字之间的互相转换
- 数字与字符串之间的转换
- 深入浅出学Spring Data JPA
- A + B 问题
- C++知识体系
- 招人面试
- 搜索引擎的工作原理
- IP地址转换:数字与字符串之间的转换
- Linux Kernel input设备之分配input设备
- CodeForces
- 使用x-studio365导入csb并发布到CocosStudio2.x兼容工程
- 《Wavelet Theory:An elementary Approach With Applications》中关于例6.10的疑惑
- “三天打鱼,两天晒网”______日期计算及判定,文本输入输出C++程序
- linux 线程同步问题
- Typedef用法
- ffplay中stream_component_open()函数分析