Java中的反向无符号到有符号转换 使用C++,INT从“签名”转换为“未签名”。
我可以使用Java将这个“unsigned”int转换回“signed”int吗Java中的反向无符号到有符号转换 使用C++,INT从“签名”转换为“未签名”。,java,c++,Java,C++,我可以使用Java将这个“unsigned”int转换回“signed”int吗 符号值(-3)使用C++ +转换为无符号(65533) 如何使用Java将无符号(65533)值转换回有符号(-3) 提前谢谢 Prav如果我正确理解了这个问题,你有一些价值,比如 int value = 65533; 您希望将其视为有符号16位整数,对于该整数,解决方案非常非常简单: short signed = (short) value; // -3 您可以使用以下选项: if (a > 32767
符号值(-3)使用C++ +转换为无符号(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位 当您想要将有符号短整数:-3转换为无符号短整数时,您只得到65533。这是关于位a nop的 在Java中,只需执行
int i = 65533; // or other values from unsigned short int
if (i >= (1<<15) {
i -= 1 << 16;
}
inti=65533;//或来自无符号短整型的其他值
如果(i>=(1)p>您使用C++来解释有符号整数,并将其表示为无符号的2字节整数。< /P>
回退方式仅在表示为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);
你想用它来实现什么?65533在JAVA中是一个可接受的有符号int值。我需要返回实际的有符号值。在我的接口中,我使用JAVA语言。@praveen:65533是一个有符号值…你是说如何在x86上以相同的16位二进制表示获得相应的负值?顺便说一句,问题很可能是做你的C++程序或者你和它的接口。你应该修复原因,而不是症状。<代码> 0x7FFF 和 0x10000( )看起来有点不太随机。嗯,是的。这是我在java中唯一能想到的无符号值的来源,因为所有的原始类型都是署名的。我想你误解了这个问题。他有一个E。XTyAL C++程序,为他打破16位值。现在他想重新解释一个16位无符号整数作为符号整数(当然,这两个都用java表示为<代码> int <代码> s)。他是如何将16位无符号整数作为有符号整数的?路易斯。我如何才能将32位有符号整数取回?@praveen:您不能将32位负值的无符号表示形式存储在Javaint
中,因此这个问题没有太多意义。答案仍然是一样的:修复C/Java桥中的类型不匹配.