现有一个字符串类型的ip地址,写一个函数将他转换成整形的ip地址 char *string=“192.168.10.5”,求代码

作者&投稿:汗妻 (若有异议请与网页底部的电邮联系)
c# 如何将一个字符串形式的IP地址转化为long型的数据?~

将一个Ip地址转换成整形

//接受一个String类型的一个参数,将其转化成一个long类型的
//暂时转化String类型的IP地址
public long ipToLong(String ip){
String[] ips = ip.split("//.");
StringBuffer strip = new StringBuffer();
for(int i=0;i<ips.length;i++){
strip.append(ips[i]);
}
return Long.parseLong(strip.toString());
}

当发生 192.168.12.1和192.168.1.21的时候用上面的那种转换的话,结果是相同的:192168121
所以有下面两种方式:
第一种:
id分为四段,每段不够3位的话,加零如:192.168.12.1和192.168.1.21,结果是:192168012001和192168001021
code:
package com.text.dos;
import org.omg.PortableInterceptor.DISCARDING;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根

String s = "192.168.1.12";
long j = doString(s);
System.out.println(j);
}

private static long doString(String idString)
{
long i = 0;
int a1 = idString.indexOf(".");
int a2 = idString.indexOf(".",a1+1);
int a3 = idString.indexOf(".",a2+1);


String s1 = idString.substring(0,a1);
String s2 = idString.substring(a1+1,a2);
String s3 = idString.substring(a2+1, a3);
String s4 = idString.substring(a3+1,idString.length());
//System.out.println(s4);

if(s1.length()==1)
s1 = "00"+s1;
else if (s1.length()==2) {
s1 = "0"+s1;
}
System.out.println(s1);

if(s2.length()==1)
s2 = "00"+s2;
else if (s2.length()==2) {
s2 = "0"+s2;
}
System.out.println(s2);

if(s3.length()==1)
s3 = "00"+s3;
else if (s3.length()==2) {
s3 = "0"+s3;
}
if(s4.length()==1)
s4 = "00"+s4;
else if (s4.length()==2) {
s4 = "0"+s4;
}

System.out.println(s3);
String s = s1+s2+s3+s4;
i = Long.parseLong(s);


return i;
}
}
第二种:
一、应用范围
一般用在登录限制、查找IP所在城市等需求中,windows的ping命令也支持整数形式的IP。
二、关键技术点
将IP地址转化成整数的方法如下:
1、通过String的indexOf方法找出IP字符串中的点"."的位置。
2、根据点的位置,使用String的substring方法把IP字符串分成4段。
3、使用Long的parseLong方法把子段转化成一个3位整数。
4、通过左移位操作(<<)给每一段的数字加权,第一段的权为2的24次方,第二段的权为2的16次方,第三段的权为2的8次方,最后一段的权为1

将整数形式的IP地址转化成字符串的方法如下:
1、将整数值进行右移位操作(>>>),右移24位,右移时高位补0,得到的数字即为第一段IP。
2、通过与操作符(&)将整数值的高8位设为0,再右移16位,得到的数字即为第二段IP。
3、通过与操作符吧整数值的高16位设为0,再右移8位,得到的数字即为第三段IP。
4、通过与操作符吧整数值的高24位设为0,得到的数字即为第四段IP。
三、实例演示
public class IP2Long ...{

//将127.0.0.1形式的IP地址转换成十进制整数,这里没有进行任何错误处理
public static long ipToLong(String strIp) ...{
long[] ip = new long[4];
//先找到IP地址字符串中.的位置
int position1 = strIp.indexOf(".");
int position2 = strIp.indexOf(".", position1 + 1);
int position3 = strIp.indexOf(".", position2 + 1);
//将每个.之间的字符串转换成整型
ip[0] = Long.parseLong(strIp.substring(0, position1));
ip[1] = Long.parseLong(strIp.substring(position1+1, position2));
ip[2] = Long.parseLong(strIp.substring(position2+1, position3));
ip[3] = Long.parseLong(strIp.substring(position3+1));
return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
}

//将十进制整数形式转换成127.0.0.1形式的ip地址
public static String longToIP(long longIp) ...{
StringBuffer sb = new StringBuffer("");
//直接右移24位
sb.append(String.valueOf((longIp >>> 24)));
sb.append(".");
//将高8位置0,然后右移16位
sb.append(String.valueOf((longIp & 0x00FFFFFF) >>> 16));
sb.append(".");
//将高16位置0,然后右移8位
sb.append(String.valueOf((longIp & 0x0000FFFF) >>> 8));
sb.append(".");
//将高24位置0
sb.append(String.valueOf((longIp & 0x000000FF)));
return sb.toString();
}
/** *//**
* @param args
*/
public static void main(String[] args) ...{
String ipStr = "192.168.0.1";
long longIp = IP2Long.ipToLong(ipStr);
System.out.println("192.168.0.1 的整数形式为:" + longIp);
System.out.println("整数" + longIp + "转化成字符串IP地址:"
+ IP2Long.longToIP(longIp));
//ip地址转化成二进制形式输出
System.out.println("192.168.0.1 的二进制形式为:" + Long.toBinaryString(longIp));

}
}

你要知道你平常用的ip地址存入计算机并不是点分形式的,是uint32类型的,当你需要取得这个点分形式的ip地址,你需要调用inte_ntoa,他的参数是in_addr,你要知道in_addr不是一个基本类型,它是一个结构体,里面有个成员,你把他的值设成那个uint32类型的ip,再调用inet_ntoa,算的结果就是点分形式的ip了

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int main()
{

 char *string="192.168.10.5";
 char tmp[4][4]={0};
 int co[4]={0};
 int i=0;
 char *p,*q;
 p=q=string;
 while(p!=NULL)
 {
  p=strchr(q,'.');
  if(p!=NULL)
  {
   strncpy(tmp[i],q,p-q);
   q=p+1;
   i++;
  }
 }
 strncpy(tmp[3],q,string+strlen(string)-q);
 for(i=0;i<4;i++)
 {
  co[i]=atoi(tmp[i]);
  if(i!=3)
  printf("%d.",co[i]);
  else
     printf("%d
",co[i]);  

 }
}
提取到的整数存到int数组co中

co[0]=192

co[1]=168

co[2]=10

co[3]=5



关键代码

char *string = "192.168.10.5";
char *delims = ".";
char *byte = null;
int count = 0;
unsigned int result;

byte = strtok(string, delims);
while(byte != null){
result += atoi(byte);
if( ++count < 4)
result <<= 8;
byte = strtok(null, delims);
}

printf("result is %d\n", result);

---------------------------------------------
基本思路,用 strtok分割字节,得到的当前字节左移一个字节(8位)加上下一个字节

不想用windows api用sscanf吧,还有sprintf在转回字符串时很方便,就是效率不如自己直接写的。

int a[4];
sscanf(string, "%d.%d.%d.%d", &a[0], &a[1], &a[2], &a[3]);
int ip = a[0]<<24|a[1]<<16]|a[2]<<8|a[3];
要另外一个顺序倒过来

使用unsigned long strIp = inet_addr(“192.168.10.5”);


想用C# 写一个函数,参数是一个string类型的字符串,暂名为str。功能是...
private void OpenForm(string fName){ Form obj = Assembly.Load("WindowsApplication1").CreateInstance("WindowsApplication1."+fName, true) as Form;if (obj != null){ obj.Show();} else { MessageBox.Show("程序集中并不包含"+fName+"窗口");} } 使用以上方法需要引用using System....

C语言,为什么字符串类型的数组,可以用数组名对数组进行整体输入个输出...
咱们分析下:字符数组中如果保存的是字符串,比如 char tar[20] = "hello"; 要知道字符串默认的是以'\\0'结尾的,所以这里隐含的最后还有一个'\\0'而printf("%s", tar); 这个语句,在执行的时候,是从tar指向的字符开始输出,一直输出直到遇到第一个'\\0'为止。 所以会输出hello.而如果tar[20...

一个类里有string类型数据是不是不能用ofstream写入文件
是的。string对象不能简单的通过io写入文件,因为这个对象是通过指针实现的,你写入文件的将会是一个内存地址,无法直接保存字符串内容。解决办法:要么不使用string对象,而是char\/wchar数组保存字符串;要么,自己写一个类的IO函数(方法),在方法中获取string内容到一个字符串指针或数组,再写入文件。

想请教一下char 和 string的 区别
1、类型不同,char是字符类型, String是字符串类型。2、String字符串是用""来包含串的, char是用''来包含单字符的。char a='1';\/\/定义一个字符。String b="dadsa";\/\/定义一个字符串。3、String内部用来存储的结果是一个char字符数组。private final char value[];\/\/这是string中用来存储值...

设计一个字符串类String,要求该类能够完成以下操作(用函数重载完成...
bufferLength = strLength + 1;buffer = new char[ bufferLength ];strcpy( buffer, cString );} String::String( const String & str ){ strLength = str.length( );bufferLength = strLength + 1;buffer = new char[ bufferLength ];strcpy( buffer, str.buffer );} String::String( ...

8、关于switch结构的说法哪些是正确的?请选出1个正确答案。
A,default标签可以省略;B,多个代码片断可以共用一个标签;C,continue关键字只能在循环结构中使用;D,default标签一般在case标签之后,没有case标签时仍可保留default标签;E,目前(JDK1.7)switch结构支持的值类型包括int、char、byte、short、long原生类型及其包装类型,同时支持枚举、字符串类型,1.7...

java中如何把一个String类型的变量转换成double型的?
Double.parseDouble(String类型变量)例如定义String变量A为“10”,将String转化为Double变量。我写出来了,你可以看一下,如下图:

急,在线等。C++编程,定义一个字符串类String,包含数据成员int size和...
我还加了一个>>重载 include<iostream>#include<string>using namespace std;\/*每个成员函数都是只归对象使用的,当一个对象调用成员时,这里面的成员只归该对象所有,只有该对象可以修改*\/class String{public:String();String(char *ch);\/*复制构造函数在用 该对象的一个对象初始化另一个对象的...

编写一个方法,将一个以字符串形式表示的long类型的数组分离出来保存在...
package com.golden.servlet.util;import java.util.Arrays;public class Test { public static void main(String[] args) { String str = "1,2;3,4,5;6,7,8;9"; for (double[] ds : parseDoubleArray(str)) { System.out.println(Arrays.toString(ds)); } } ...

c++如何把一个string类型的字符串分割
include <iostream>#include <string>using namespace std;void output(string &str){ for (int i = str.length()-4; i > 0; i-=4) str.insert(i, ","); cout << str << endl;}int main(){ string str = "abcdefghijklmn"; output(str); float f = 100000000...

陵县18758569475: 如何将String类型的IP地址转化为InetAddress类型
鲍先裕优: import java.net.*; public class MyInetAddress1{ public static void main(String[] args) throws Exception{ //getLocalHost() InetAddress localAddress= InetAddress.getLocalHost(); String local= localAddress.toString(); String temp[]= local.split("/"); ...

陵县18758569475: 如何将String类型的IP地址转化为InetAddress类型 -
鲍先裕优: String name = "XXXXXX"; InetAddress address=InetAddress.getByName(name); 注意InetAddress address=InetAddress.getByName(name);方法有异常,需要用try,catch包住

陵县18758569475: 在internet中,用字符串表示的IP地址称为 -
鲍先裕优: 域名

陵县18758569475: java 中怎么把ip地址付给一个String 型字符串? 、 -
鲍先裕优: //InetAddress.getLocalHost().getHostAddress() ; String ip =socket.getInetAddress().getHostAddress() ;

陵县18758569475: 在internet中,用字符串表示的ip地址称为什么 -
鲍先裕优: 那个叫做 域名 通过DNS服务器 可以解析成ip地址 DNS 是域名系统 (Domain Name System) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务.在Internet上域名与IP地址之间是一一对应的

陵县18758569475: c# 如何将一个字符串形式的IP地址转化为long型的数据? -
鲍先裕优: 将一个Ip地址转换成整形//接受一个String类型的一个参数,将其转化成一个long类型的 //暂时转化String类型的IP地址public long ipToLong(String ip){String[] ips = ip.split("//.");StringBuffer strip = new StringBuffer();for(int i=0;i<ips.length;i++...

陵县18758569475: c语言怎样编写显示本机ip地址的程序 -
鲍先裕优: ... struct in_addr addr; hostent *pHost = ::gethostbyname("localhost");//在此写入你自己电脑主机名字 switch (pHost->h_addrtype) { case AF_INET: printf("internet网络地址类型(AF_INET)\n"); break; case AF_INET6: printf("internet网络地址...

陵县18758569475: 如何将string类型IP转化为inetaddress类型 -
鲍先裕优: String ip = "1.1.1.1"; InetAddress addr = InetAddress.getByName(ip); 我正在开发,如果这中方法可以我来确定.

陵县18758569475: C语言实现,如何判断一个字符串属于ABCDE哪类地址..... -
鲍先裕优: A、B、C类地址的区别和划分: 1. A类IP地址一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,地址范围从1.0.0.0 到126.0.0.0.可用的A类网络有126个,每个网络能容纳1亿多个主机.2. B类IP地址...

陵县18758569475: 截取字符串中的IP地址 -
鲍先裕优: 把这句话 赋值给字符串str; int a = str.IndexOf('[')+1;//获取ip开头所在的位置 string str1 =str.Substring(a);//获取从ip往后的字符串 int c = str1.Length;//计算ip往后的字符串的长度 int b = str1.IndexOf(']');//获取'】'所在的位置 int d = (str1.Substring(b)).Length;//截取从'】'开始直到最后的字符串并计算其长度 int ipl = c - d;//获取ip地址的长度 string ip = str.Substring(a,ipl);//获取IP

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网