[英]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.