缓冲区为整数。无法理解这一行代码

杰克布

我正在寻找帮助来了解npm moudle hash-index中的这一行代码

该模块的目的是成为一个函数,该函数通过您传递的第二个参数返回输入mod的sha-1哈希。

我不理解此模块中的特定功能,该功能将Buffer作为输入并返回整数:

var toNumber = function (buf) {
  return buf.readUInt16BE(0) * 0xffffffff + buf.readUInt32BE(2)
}

我似乎无法弄清楚为什么选择了缓冲区的那些特定偏移量以及乘以的目的是什么0xffffffff

这个模块对我来说真的很有趣,如果您对理解如何将缓冲区转换为整数有任何帮助,将不胜感激!

纳达夫

它在缓冲区中打印第一个UINT32(无符号整数32位)。

首先,它使用Big Endian读取缓冲区的前两个字节(UINT16),然后将其乘以0xFFFFFFFF。

然后,它读取缓冲区中的后四个字节(UINT32),并将其添加到乘数中-得出一个由缓冲区的前6个字节构成的数字。

示例:考虑[Buffer BB AA CC CC DD ...]

0xbb * 0xffffffff = 0xbaffffff45
0xbaffffff45 + 0xaaccccdd = 0xbbaacccc22

关于偏移量,它选择了这种方式:

第一次,它从字节0读取到字节1(隐式键入-UINT16)

第二次,它从字节2读取到字节5(转换为类型-UINT32)

综上所述,它使用大尾数表示法从缓冲区的前6个字节构造一个数字,并将其返回给调用函数。

希望能回答您的问题。

Wikipedia的Big Endian条目

编辑

正如有人在评论中指出的那样,我完全错误地认为0xFFFFFFFF是32的左移,这只是一个数字乘法-我假设这是一种内部协议,用于计算符合他们期望的正确合法缓冲区头。

编辑2

在原始上下文中查看了函数之后,我得出了以下结论:

此函数是哈希流的一部分,它以这种方式工作:

主流程接收字符串输入和哈希输出的最大数量,然后接收字符串输入,并将其插入SHA-1哈希函数中。

SHA-1哈希返回一个Buffer,它接受该Buffer,并对其应用哈希索引,如以下代码摘录所示:

return toNumber(crypto.createHash('sha1').update(input).digest()) % max

另外,它使用模数来确保返回的哈希索引不超过最大可能的哈希值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对RxJava中的缓冲区的错误理解

来自分类Dev

在ESS中评估缓冲区时,光标跳至最后一行

来自分类Dev

用包装在文本块中的每一行替换缓冲区中的行?

来自分类Dev

OpenGLException:禁用数组缓冲区对象时无法使用偏移量。.在调用glEnable(GL_ARRAY_BUFFER)之后的一行上?

来自分类Dev

无法理解Pascal Triangle for C ++中的这一行

来自分类Dev

返回一个枚举,无法理解代码行

来自分类Dev

Android Camera2,我从ImageReader获取YUV图像。U和V缓冲区只有一行(跨步)数据,其余为零

来自分类Dev

如何将一行从复制缓冲区粘贴到每一行的末尾?

来自分类Dev

Javascript-无法理解这一行代码

来自分类Dev

伪代码无法理解行

来自分类Dev

从emacs缓冲区的每一行中删除最后n个字符

来自分类Dev

在emacs缓冲区的每一行中的同一位置添加和删除文本

来自分类Dev

无法理解JAVA代码行

来自分类Dev

从缓冲区的开头删除一行

来自分类Dev

缓冲区为空!:无法分配内存

来自分类Dev

无法理解代码片段

来自分类Dev

C ++:帮助理解这一行代码

来自分类Dev

无法理解C#代码的这一部分

来自分类Dev

用我在vi中的缓冲区中的行替换一行

来自分类Dev

请帮助我理解这一行代码?

来自分类Dev

无法理解部分代码

来自分类Dev

无法理解python代码

来自分类Dev

解释这一行代码

来自分类Dev

向我解释这一行代码的功能

来自分类Dev

Android Camera2,我从ImageReader获取YUV图像。U和V缓冲区只有一行(跨步)数据,其余为零

来自分类Dev

Scala 奇怪的代码无法理解这一点:访问者 [String] ⇒

来自分类Dev

无法理解python中一行代码中的AND运算符

来自分类Dev

我似乎无法理解这一行代码(JavaScript)的含义

来自分类Dev

这一行Javascript代码的性能提升

Related 相关文章

  1. 1

    对RxJava中的缓冲区的错误理解

  2. 2

    在ESS中评估缓冲区时,光标跳至最后一行

  3. 3

    用包装在文本块中的每一行替换缓冲区中的行?

  4. 4

    OpenGLException:禁用数组缓冲区对象时无法使用偏移量。.在调用glEnable(GL_ARRAY_BUFFER)之后的一行上?

  5. 5

    无法理解Pascal Triangle for C ++中的这一行

  6. 6

    返回一个枚举,无法理解代码行

  7. 7

    Android Camera2,我从ImageReader获取YUV图像。U和V缓冲区只有一行(跨步)数据,其余为零

  8. 8

    如何将一行从复制缓冲区粘贴到每一行的末尾?

  9. 9

    Javascript-无法理解这一行代码

  10. 10

    伪代码无法理解行

  11. 11

    从emacs缓冲区的每一行中删除最后n个字符

  12. 12

    在emacs缓冲区的每一行中的同一位置添加和删除文本

  13. 13

    无法理解JAVA代码行

  14. 14

    从缓冲区的开头删除一行

  15. 15

    缓冲区为空!:无法分配内存

  16. 16

    无法理解代码片段

  17. 17

    C ++:帮助理解这一行代码

  18. 18

    无法理解C#代码的这一部分

  19. 19

    用我在vi中的缓冲区中的行替换一行

  20. 20

    请帮助我理解这一行代码?

  21. 21

    无法理解部分代码

  22. 22

    无法理解python代码

  23. 23

    解释这一行代码

  24. 24

    向我解释这一行代码的功能

  25. 25

    Android Camera2,我从ImageReader获取YUV图像。U和V缓冲区只有一行(跨步)数据,其余为零

  26. 26

    Scala 奇怪的代码无法理解这一点:访问者 [String] ⇒

  27. 27

    无法理解python中一行代码中的AND运算符

  28. 28

    我似乎无法理解这一行代码(JavaScript)的含义

  29. 29

    这一行Javascript代码的性能提升

热门标签

归档