我正在尝试在java中移植我的C ++项目。 在线下我必须从串口读取一些字节并将两个字节合并为短。下面的代码正在优雅地工作。
<TextBlock
x:Name="textBlock"
x:Uid="HelloWorld"
Text="{Binding Tag, ElementName=textBlock, Converter={StaticResource UpperCaseConverter}}"
/>
在c ++项目中,他们使用unsigned short(在java中我们没有签名)。
ByteBuffer bb = ByteBuffer.allocate(2);
bb.order(ByteOrder.LITTLE_ENDIAN);
bb.put(b1);
bb.put(b2);
result = bb.getShort(0);
我想将结果与c ++对齐。任何建议和帮助都会非常值得赞赏。
答案 0 :(得分:0)
请勿使用getShort()
,而是使用getInt()
。
您的问题是最重要的位被解释为符号位,因为这是签名短路的情况。如果扩展数据类型以使该位不再被视为符号位,则应该获得所需的行为。
您可能需要填充缓冲区来执行此操作:
ByteBuffer bb = ByteBuffer.allocate(4);
bb.order(ByteOrder.LITTLE_ENDIAN);
bb.put(b1);
bb.put(b2);
bb.put(0);
bb.put(0);
result = bb.getInt(0);
编辑:如果只有C ++代码正在做正确的事情,那么将工作,但正如上面的评论中指出的那样,它不是它不是简单地取两个字节并将它们组合成一个短的。它还对它们执行一些其他的转换。)
答案 1 :(得分:0)
java -6(0xFFFA)是正确的,C ++ 506(0x01FA)不是。 0xFA回应。似乎你错误输入-1:1或 - -1。