[英]Java: transform Long Timestamp + int offset to readable format
[英]How to transform int to long in Java?
很多像这样将字符串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
方法呢? 例如
Integer a = 0;
Long.valueof(a.toString());
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;
}
str2Ip
可能返回负的int
值。 您发布的int2long
方法将输入int
视为unsigned int
(尽管Java没有unsigned int
),因此返回一个正long
。
如你所建议的那样将str2Ip
的结果直接转换为Long
(或者只是将int
为long
或使用Number
的longValue()
)会将负int
转换为负long
s,这是一种不同的行为。
顺便说一下,你的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 ());
是
4278255873
-16711423
您可以使用Number类的longValue()方法。 这意味着该方法可用于任何Number类子级,包括Integer。 请注意,这不适用于基本类型(例如int)。
那怎么样?
Integer a = 10;
return 1L * a;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.