繁体   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