【问题标题】:16 bit hex string to signed int in Java在 Java 中将 16 位十六进制字符串转换为带符号的 int
【发布时间】:2013-02-18 14:58:14
【问题描述】:

我有一个用 Java 表示的字符串,它用十六进制表示一个有符号的 16 位值。该字符串可以是从"0000""FFFF" 的任何字符串。

我使用Integer.parseInt("FFFF",16) 将其转换为整数。但是,这会返回一个无符号值 (65535)。

我希望它返回一个有符号值。在此特定示例中,"FFFF" 应返回 -1

我怎样才能做到这一点?由于它是一个 16 位值,我想使用 Short.parseShort("FFFF",16) 但这告诉我我超出了范围。我猜parseShort() 预计会出现负号。

【问题讨论】:

    标签: java parsing signed hex


    【解决方案1】:

    您可以将从Integer.parseInt() 返回的int 转换为短:

    short s = (short) Integer.parseInt("FFFF",16);
    System.out.println(s);
    

    结果:

    -1
    

    【讨论】:

    • @AndreasFester ,为什么这需要进一步缩短?
    • @Rachael 因为Integer.parseInt 返回的值仍然是(32 位)int 值 - 对于0xFFFF,即65535。通过将其分配给short,高 16 位被有效地丢弃,并将第 15 位作为短值的符号位,从而产生-1(所有位均为 1)。需要强制转换来告诉编译器这种位丢失是有意的 - 如果没有强制转换,编译器会抱怨 possible lossy conversion from int to short
    • @AndreasFester 感谢您的精彩解释。
    【解决方案2】:

    试试

    int i = (short) Integer.parseInt("FFFF", 16);
    

    【讨论】:

      猜你喜欢
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 2019-07-23
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多