Java中的反向无符号到有符号转换

Reverse unsigned to signed conversion in Java

本文关键字:符号 转换 无符号 Java      更新时间:2023-10-16

使用C++,int从"签名的";至";无符号";。

我能把这个";无符号的";int返回到";签名的";使用Java。

使用C++将有符号值(-3)转换为无符号值(65533)。

如何使用Java 将无符号(65533)值转换回有符号(-3)

提前谢谢。

Prav

如果我正确理解这个问题,你就有一些价值,比如

int value = 65533;

并且您希望它被视为一个有符号的16位整数,对此解决方案非常非常简单:

short signed = (short) value; // -3

您可以使用以下内容:

if (a > 32767) a -= 65536;

C++中的int通常是32位,然而,您所说的65533是-3,因此您的int有16位。大多数人会将16位int视为短(int)

Java中的int/Integer总是32位。

当你想把带符号的短int:-3转换成无符号的短整型时,你只得到65533。这是关于比特的。

在Java中只需执行

 int i = 65533; // or other values from unsigned short int
 if (i >= (1<<15) {
    i -= 1 << 16;
 }

您使用C++来解释有符号整数,并将其表示为无符号2字节整数。

返回方式仅在假设表示为2字节整数的情况下有效,通过或返回符号扩展位(注意,这是未经测试的),以下内容应该有效:

int number = 65533;
// check sign bit for 2-byte integer, add in sign bits for 4 byte integer if set 
int signedNumber = (0 == (number & 0x8000)) ? number : (number | 0xFFFF0000);