十六进制值

时间:2016-02-29 11:32:49

标签: java c hex

我在C代码中有以下行声称将已签名的int8转换为无符号的int16。

float x = (float) (((int16_t) ((temp[0] <<8) & 0xff00) | (temp[1] & 0x00ff)));

我将此转换为Java

float x = (((temp[0] << 8) & 0xff00) | (temp[1] & 0x00ff));

对于相同的输入数组,

temp[] = {0xFC, 0x10}

x= -1008 // In C
x= 64528 // In Java

我在SO和google上提到过各种帖子,但无法确定遗漏的内容。

尝试了其他数据类型short,int,float等但无济于事

我们如何在java中获得相同的-1008值?请帮忙。

提前致谢

1 个答案:

答案 0 :(得分:3)

在C中你还有一个演员:(short)。如果你在Java中做同样的事情 - int,你会得到相同的结果。

问题在于,在C和Java中,临时结果至少转换为int16_t(或更高类型,可以保存该值)。使用强制转换为short或{{1}}会强制编译器再次丢失更高的位。