繁体   English   中英

从Java切换到JavaScript时,为什么字节数组会更新

[英]Why do byte arrays update when switching from java to javascript

我正在使用将二进制数据发送到Ponte(Node.js)应用程序的工具,该应用程序将此消息(无更改)转发到AMQP代理。

总体来说,它是:Java-> JavaScript-> Java我确实对二进制数据进行了奇怪的转换。 以下是十六进制值的显示顺序:

当我准备一个二进制数据集时,它看起来像这样:

[4, -30, -30, -9, -115, 0, 1, 0, 1, 0, 96, -32, 46, 0, 0, 0]

当它到达JavaScript(Ponte)时,如下所示:

[4, 226, 226, 247, 141, 0, 1, 0, 1, 0, 96, 224, 46, 0, 0, 0]

在这里,负小数变为正小数。 如果您“减去”这些值,则可以看到它们的值为256

现在,我通过AMQP代理将此数据从JavaScript发送回Java。

在Java中,我的二进制数据现在看起来像这样:

[4, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, 0, 1, 0, 1, 0, 96, -17, -65, -67, 46, 0, 0, 0]

它仍然像以前一样,但是所有从负数变为正数的小数现在都变成了

-17, -65, -67,

在Java中,我使用字节数组,在JavaScript中,我使用缓冲区。 谁能解释这种奇怪行为的根源?

让我知道您是否需要有关我的问题的更多信息。

非常感谢!

显然这是Ponte和Java之间的一个已签名/未签名问题

[4,-30,-30,-9,-115,0,1,0,1,0,96,-32,46,0,0,0]

[4,226,226,247,141,0,1,0,1,0,96,224,46,0,0,0]

如果您仔细观察,则负值将等于256的值变成互补的值...

在Ponte端,您可以进行数学运算以将该数组转换回有符号的8位数字

[4,226,226,247,141,0,1,0,1,0,96,224,46,0,0,0]

只需检查Java端所有大于127的bigggggs是否为负数,因此您需要执行以下操作:

如果数字> 127,则数字-= 256

一切都与您有关(我的意思是编程语言)解释8位。 在Java中,第一位是符号位,而在JavaScript中,第一位被视为数字的最大位。 在数据方面,这两个值相等。 如果要防止这种切换,则应使用较大的原始值,例如charint

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM