我正在尝试将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相同的结果。
答案 0 :(得分:0)
假设标头是节点Buffer的一个实例,那么你有各种各样的函数可以从缓冲区读取各种大小的整数,包括
buf.readUInt32LE
buf.readUInt32BE
这两个都取一个读取字节的偏移量。 ruby L
说明符表示本机字节顺序,因此根据此代码的运行位置,您可能需要这些函数中的任何一个,具体取决于您是在大型还是小型平台上。例如,在你需要的x86机器上
header.readUInt32LE(120)
协议通常指定大端或小端(传统的网络字节顺序是大端)
您可以使用os.endianness