许多人将字符串ip转换为像这样的长java代码演示
private static int str2Ip(String ip) {
String[] ss = ip.split("\\.");
int a, b, c, d;
a = Integer.parseInt(ss[0]);
b = Integer.parseInt(ss[1]);
c = Integer.parseInt(ss[2]);
d = Integer.parseInt(ss[3]);
return (a << 24) | (b << 16) | (c << 8) | d;
}
private static long ip2long(String ip) {
return int2long(str2Ip(ip));
}
private static long int2long(int i) {
long l = i & 0x7fffffffL;
if (i < 0) {
l |= 0x080000000L;
}
return l;
}
为什么我们不使用其他Java方法代替方法int2long
? e.g。
Integer a = 0;
Long.valueof(a.toString());
答案 0 :(得分:5)
Integer a = 0;
Long.valueof(a.toString());
是一种奇特的写作方式
long val = (long) myIntValue;
问题是,如果你做这种事情,负的int值将保持为负,int2long方法是将signed int转换为unsigned long,这与此不同。
我个人认为最初使用longs
而不是ints
工作会更简单,例如:
private static int str2Ip(String ip) {
return (int) ip2long;
}
private static long ip2long(String ip) {
String[] ss = ip.split("\\.");
long a, b, c, d;
a = Long.parseLong(ss[0]);
b = Long.parseLong(ss[1]);
c = Long.parseLong(ss[2]);
d = Long.parseLong(ss[3]);
return (a << 24) | (b << 16) | (c << 8) | d;
}
答案 1 :(得分:3)
str2Ip
可能会返回负值int
。您发布的int2long
方法将输入int
视为无符号int
(尽管Java没有无符号int
),因此返回正{{1} }}
根据您的建议将long
的结果直接转换为str2Ip
(或只是将Long
转换为int
或使用long
&#39; s Number
}会将否定的longValue()
转换为负int
s,这是一种不同的行为。
顺便说一下,您的long
方法可以简化为:
int2long
例如,输出如下:
private static long int2long(int i) {
return i & 0xffffffffL;
}
是
System.out.println (ip2long("255.1.1.1"));
Integer a = str2Ip("255.1.1.1");
System.out.println (a.longValue ());
答案 2 :(得分:2)
您可以使用Number类的longValue()方法。这意味着该方法可用于任何Number类子级,包括Integer。请注意,这不适用于基本类型(例如int)。
答案 3 :(得分:1)
那怎么样?
Integer a = 10;
return 1L * a;