簡體   English   中英

如何在Java中將int轉換為long?

[英]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 (或者只是將intlong或使用NumberlongValue() )會將負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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM