来自ruby的nodejs缓冲区uint 32?

时间:2014-08-03 07:35:55

标签: node.js

我正在尝试将Ruby程序转换为NodeJS,但我似乎陷入了缓冲区。

我有

rounds = header_bytes[120..-1].unpack('L*').first

在Ruby中,它标题一个缓冲区(header_bytes),并获得120-124(或者在这种情况下为-1,这是剩下的)。然后将其解压缩为无符号的32位整数。

我试图在JS中做同样的事情,但它似乎无法让它发挥作用。我有

rounds = header.slice(120,124).toString('ucs2');

我已尝试过toString中的所有不同格式,并且没有任何内容返回与Ruby相同的结果。

1 个答案:

答案 0 :(得分:0)

假设标头是节点Buffer的一个实例,那么你有各种各样的函数可以从缓冲区读取各种大小的整数,包括

buf.readUInt32LE
buf.readUInt32BE

这两个都取一个读取字节的偏移量。 ruby L说明符表示本机字节顺序,因此根据此代码的运行位置,您可能需要这些函数中的任何一个,具体取决于您是在大型还是小型平台上。例如,在你需要的x86机器上

header.readUInt32LE(120)

协议通常指定大端或小端(传统的网络字节顺序是大端)

您可以使用os.endianness

检查平台字节顺序