在java中将两个字节(一个正面和另一个负面)组合成短

时间:2016-06-03 07:10:08

标签: java c++ byte short

我正在尝试在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 ++对齐。任何建议和帮助都会非常值得赞赏。

2 个答案:

答案 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。