JavaScript中将缓冲区转换为整数。

6

我从串口收到了这个缓冲区:

<Buffer 04 02 08 dc>

第二个字节表示我需要解析响应数据的字节数。因此,我需要解析这两个字节08 dc,并将它们转换为long unsigned

在Node.js服务器上,我该如何在JavaScript中完成这个任务?


它们是大端还是小端?(即,您想要0x08dc还是0xdc08?)最大可能的字节数是多少?(如果long = 8字节,请注意JavaScript无法精确表示这些数字,除非使用BigInt。) - Ry-
2
无论如何,请阅读此处的内容:https://nodejs.org/api/buffer.html#buffer_buf_readintbe_offset_bytelength - Ry-
@Ry- 谢谢您的回答,但我真的不知道它们是BE还是LE,我在发布这篇文章之前已经查看了API :/,有什么想法可以找到这个信息吗?应该有一些规范吧? - bmvr
同时,使用nodejs API转换这些缓冲区时,会给我返回一些奇怪的数字。例如,当我的国家最大电压为220v时,我读取到了2280伏特的瞬时电压,这是不可能的。 - bmvr
JavaScript 中没有“long unsigned”这样的东西。你打算用这个整数做什么?最好将它们保留在缓冲区中。 - Bergi
1个回答

7

buf.readInt32BE([offset])和 buf.readInt32LE([offset])让你从以offset为起点的4个字节中读取一个32位整数。

readInt32BE()返回大端序格式的有符号32位整数,readInt32LE()返回小端序格式的有符号32位整数。

Buffer读取的整数被解释为二进制补码有符号值。


谢谢。我已经阅读了文档,你说的一切都是正确的,只是我误解了我的电力计的文档。 - bmvr
@bmvr,我很高兴你已经解决了它。有些变体需要一个byteLength参数,这可能符合您的“第二个字节表示…”的要求,但对于byteLength大于6的情况不适用,因为JavaScript使用带52b尾数的浮点数。 - Mike Samuel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接