使用C ++,int从“signed”转换为“unsigned”。
我可以使用Java将此“unsigned”int转换回“signed”。
使用C ++将有符号值(-3)转换为无符号(65533)。
如何使用Java
将无符号(65533)值转换回带符号(-3)
提前致谢。
Prav
答案 0 :(得分:2)
如果我正确理解了这个问题,你就会有一些像
这样的价值int value = 65533;
并且您希望将其视为带符号的16位整数,解决方案非常简单:
short signed = (short) value; // -3
答案 1 :(得分:1)
您可以使用以下内容:
if (a > 32767) a -= 65536;
答案 2 :(得分:0)
C ++中的int通常是32位,但是,您将65533称为-3,因此您的int有16位。大多数人会认为16bit int为short(int)
Java中的int / Integer总是32位。
当你想将有符号的短int:-3转换为unsigned short int时,你得到的只是65533.这是关于n a的位。
在Java中只做
int i = 65533; // or other values from unsigned short int
if (i >= (1<<15) {
i -= 1 << 16;
}
答案 3 :(得分:0)
您使用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);