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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 月经下不来内裤上总有脏东西怎么办 夏天外衣薄露出内衣怎么办 金毛体味很重怎么办 直筒连衣裙太短怎么办 托班社会下雨了怎么办 托班下雨了怎么办教案 吃鸡界面有鼠标怎么办 老年机成英语了怎么办 手机成了英语了怎么办 塑料袋融化粘到衣服上怎么办 厕所被卫生纸堵了怎么办 钻石画的胶不粘了怎么办 客厅沙发选大了怎么办 连衣裙腰大了怎么办呀 憋尿后出现尿急尿涨怎么办 脚有酸酸的味道怎么办 三星手机home键失灵怎么办 三星s6返回键失灵怎么办 三星s7屏幕漏液怎么办 三星s8出现蓝框怎么办 三星手机短信图标没了怎么办 ps没有足够的ram怎么办 ps性能调不了是怎么办 苹果6p照相模糊怎么办 相框玻璃碎了怎么办 word文档加密后忘记密码怎么办 手机wps密码忘了怎么办 苹果手表忘了密码怎么办 苹果系统忘了密码怎么办 ps画板建小了怎么办 wps表格密码忘了怎么办 word文档变成虚的怎么办 wps论文中表格跨页怎么办 word文档复制过来有边框怎么办 wps表格跨页断开怎么办 锅的铆钉老是松怎么办 文胸不知道怎么染色了怎么办 未后的信息我该怎么办? 做leep手术后大出血怎么办 眼线笔出不了水怎么办 手机字体变成空心字怎么办