Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,将两个字节(一个正字节和另一个负字节)组合成短字节 我试图用java移植C++项目。 接下来,我必须从串行端口读取一些字节,并将两个字节合并成短字节。使用下面的代码,一切都很顺利 ByteBuffer bb = ByteBuffer.allocate(2); bb.order(ByteOrder.LITTLE_ENDIAN); bb.put(b1); bb.put(b2); result = bb.getShort(0); 在C++项目中,而不是短,它们有无符号短(在java中我们没有未签名)。 我想把结果与C++对齐。任何建议和帮助都是非常值得欣赏的。_Java_C++_Byte_Short - Fatal编程技术网

在java中,将两个字节(一个正字节和另一个负字节)组合成短字节 我试图用java移植C++项目。 接下来,我必须从串行端口读取一些字节,并将两个字节合并成短字节。使用下面的代码,一切都很顺利 ByteBuffer bb = ByteBuffer.allocate(2); bb.order(ByteOrder.LITTLE_ENDIAN); bb.put(b1); bb.put(b2); result = bb.getShort(0); 在C++项目中,而不是短,它们有无符号短(在java中我们没有未签名)。 我想把结果与C++对齐。任何建议和帮助都是非常值得欣赏的。

在java中,将两个字节(一个正字节和另一个负字节)组合成短字节 我试图用java移植C++项目。 接下来,我必须从串行端口读取一些字节,并将两个字节合并成短字节。使用下面的代码,一切都很顺利 ByteBuffer bb = ByteBuffer.allocate(2); bb.order(ByteOrder.LITTLE_ENDIAN); bb.put(b1); bb.put(b2); result = bb.getShort(0); 在C++项目中,而不是短,它们有无符号短(在java中我们没有未签名)。 我想把结果与C++对齐。任何建议和帮助都是非常值得欣赏的。,java,c++,byte,short,Java,C++,Byte,Short,不要使用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.getI

不要使用
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++代码做的正确,这将是有效的,但是正如上面的注释所指出的,它不是(即不是简单地取两个字节并将它们组合成一个短的。它也执行一些其他的转换)。< / P> < P>不要使用<代码> GETStIGHER()/CUT>,使用<代码> GETIN()/<代码>。< /P> 您的问题是,最重要的位被解释为符号位,因为这是有符号短字符的情况。如果扩展数据类型,使该位不再被视为符号位,则应获得所需的行为

要执行此操作,您可能需要填充缓冲区:

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++代码做的正确,这将是有效的,但是正如上面的注释所指出的,它不是(即,不是简单地取两个字节并将它们组合成一个短的。它也对它们执行一些其他的转换)。

< p> java 6(0xFFFA)是正确的,C++ 506(0x01FA)不是。0xFA。好像你错了——1:1或-1。< /P> < P> java -6(0xFFFA)是正确的,C++ 506(0x01FA)不是。0xFA。似乎您键入了错误的-1:1或--1。

它为{107,-2}给出了65131。预期值为661。我没有得到此异常。您确定您使用的代码与上面的(包括参数<代码> 0代码>代码> >代码> GETNIT/C++ >)删除了该注释。但是没有得到预期的结果。上面的代码实际上是接收输入并将字节组合成无符号的短字符。C++代码不这样做。它给{ 107,-2 } 65131。预期是61i,我没有得到这个异常。您确定您使用的代码与上面的(包括参数<代码> 0代码>代码> >代码> GETNIT/C++ >)删除了该注释。但是没有得到预期的结果。上面的代码实际上是接收输入并将字节组合成无符号的短字符。C++代码不这样做,你到底想要什么?你的C++显然没有组合两个字节,但是java的操作是正确的。如果我们不知道C++逻辑,我们就无法知道如何做java。C++中的ElderBug将两个字节组合成无符号短,但是在java短符号中签名……这是导致结果不一致的原因吗?C++没有将两个字节组合成无符号短。至少不是以显而易见的方式。有些逻辑你没有表现出来。你到底想要什么?你的C++显然没有组合两个字节,但是java的操作是正确的。如果我们不知道C++逻辑,我们就无法知道如何做java。C++中的ElderBug将两个字节组合成无符号短,但是在java短符号中签名……这是导致结果不一致的原因吗?C++没有将两个字节组合成无符号短。至少不是以显而易见的方式。有些逻辑你没有表现出来。