将ip地址转成二进制数据,除基本输入输出不调用库函数实现

int inet_aton(const char *cp)
{
int dots = 0;
int a[32]= {0};
register unsigned long acc = 0, addr = 0;
do {
register char cc = *cp;
switch (cc)
{
case ‘0‘:
case ‘1‘:
case ‘2‘:
case ‘3‘:
case ‘4‘:
case ‘5‘:
case ‘6‘:
case ‘7‘:
case ‘8‘:
case ‘9‘:
acc = acc * 10 + (cc - ‘0‘);
break;
case ‘.‘:
if (++dots > 3)
{
return 0;
}
// Fall through
case ‘\0‘:
if (acc > 255)
{
return 0;
}
addr = addr << 8 | acc; // 这句是精华,每次将当前值左移八位加上后面的值 addr 最后结果是个unsigned long 型整数。
acc = 0;
break;
default:
return 0;
}
} while (*cp++) ;
// Normalize the address
if (dots < 3)
{
addr <<= 8 * (3 - dots) ;
}

int k=0;
while (addr)
{
a[k++]=addr%2;
addr/=2;
}
for (int k=31;k>=0; k--)
{
cout <<a[k];
if (k%8==0)
{
cout<<" ";
}
}
return 1;
}

时间: 2024-11-08 23:56:37

将ip地址转成二进制数据,除基本输入输出不调用库函数实现的相关文章

将ip地址转成二进制数据

小弟不才,谢了个 将ip地址转成二进制的代码.主要用了栈来存储,在输出二进制时做了转换,虽然实现了功能,个人感觉不是很理想,有些繁琐.毕竟是自己第一次写这个代码,贴上去,请大侠们指教! #include "stack.h"#include <string>#include <iostream>using namespace std;int main(){ int A[32] = {0}; int B[32] ={0}; stack st; initstack(s

IP地址转换成Long型数字的算法

在应用程序开发中,涉及到IP地址的存储,大部分开发人员都将其存为String(或文本类型).能否将固定格式为m.n.x.y的IP地址转换成 Long型的数字呢?答案是肯定的.在数据库层面,可以直接将结果设置成表的主键,避免IP地址的重复,因为是主键,也就是表的索引了,数据库查找时会更 快. 对于格式为m.n.x.y的IP地址,转换成Long型数字的算法如下: view plain   copy Long  =  * 256 * 256 * m + y 使用Java语言,则这样实现: view p

F5 cookie值与IP地址(二):将IP地址转换成F5 cookie值

简  介 在上一篇中,我们介绍了如何将cookie码转换成IP地址,这次我们将介绍如何将IP地址转换成cookie码.如何上一篇分析清楚了,本篇也很简单. 链接:http://showing.blog.51cto.com/11976328/1841564 转换步骤 下面,我们将以IP地址:192.168.1.1为例: 192.168.1.1->倒置顺序->1 1 168 192->分别转换为16进制->1 1 A8 C0->不够两位的补0->01 01 A8 C0-&g

ip地址转换成16进制long

<span style="font-size:18px;">public class IpUtil { /** * ip地址转换成16进制long * @param ipString * @return */ public static Long ipToLong(String ipString) { Long[] ip = new Long[4]; int pos1= ipString.indexOf("."); int pos2= ipString.

python 将IP地址转换成打包后的32位格式

python 2.7 #!/usr/bin/env python # Python Network Programming Cookbook -- Chapter - 1 # This program requires Python 2.7 or any later version import socket from binascii import hexlify def convert_ip4_address(): for ip_addr in ['127.0.0.1', '192.168.

图片转化成二进制数据、等比缩放

C# 将二进制流转化成图片格式  MemoryStream ms = new MemoryStream(photo);   Bitmap bmpt = new Bitmap(ms);   //将二进制流转化成图片格式  SickPicture.Image = bmpt;   //SickPicture为pictureBox控件名称 C# 将二进制流转化成图片格式,并且图片可再次使用    Image image = Image.FromFile(PicturePath);  //直接打开会出现再

IP地址基础知识

IP地址基础知识 网络号:用于识别主机所在的网络:主机号:用于识别该网络中的主机. 一 OSI/RM模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 二 TCP/IP模型 数据链路层(网络接口层):Wi-Fi(IEEE 802.11) · WiMAX(IEEE 802.16) ·ATM · DTM · 令牌环 · 以太网 ·FDDI · 帧中继 · GPRS · EVDO ·HSPA · HDLC · PPP · L2TP ·PPTP · ISDN·STP 等 网络层协议(互联网

IP地址、子网掩码、网络号、主机号、网络地址、主机地址

对于192.168.0.0到192.168.0.255这个网络来说,以下说法中正确的是____. 正确答案: D   你的答案: D (正确) 网段内可用来作为主机IP的范围是:192.168.0.0到192.168.0.255 Network IP是192.168.0.255 Broadcast IP是192.168.0.0 网段内的主机可以通过网卡对网卡传递数据 192.168.0.1和192.168.0.2的主机需要使用Router传递数据包 是class B等级 添加笔记 求解答(4)

IP地址,子网掩码、默认网关,DNS服务器是什么意思?

IP地址,子网掩码.默认网关,DNS服务器是什么意思? (一)  问题解析 001.   问:  IP地址,子网掩码,默认网关,DNS服务器,有什么区别呀?我知道没有IP地址就不能上网,我也知道没设DNS就不能上外网,可它们都有什么功能,有什么区别呢?还有真奇怪,我的计算机没设DNS,竟然能上QQ,却不能打开网页,这是为什么呢> 答:  IP是32位二进制数据,通常以十进制表示,并以“.”分隔.IP地址是一种逻辑地地址,用来标识网络中一个个主机,IP有唯一性,即每台机器的IP在全世界是唯一的.