我在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值?请帮忙。
提前致谢
答案 0 :(得分:3)
在C中你还有一个演员:(short)
。如果你在Java中做同样的事情 - int
,你会得到相同的结果。
问题在于,在C和Java中,临时结果至少转换为int16_t
(或更高类型,可以保存该值)。使用强制转换为short
或{{1}}会强制编译器再次丢失更高的位。