缓冲区使用说明

Buffer Use Explanation

我在 codefights 上找到了这个巧妙的凯撒密码解决方案。我想了解缓冲区在这里做什么。

b=Buffer
caesarian = (m, n) =>
  "" + b([...b(m)].map(x => (n % 26 + x + 7) % 26 + 97))

空字符串可以像那样与类型化数组连接吗?

迭代 Node.js Buffer 一次产生一个字节的数据。对于包含字母数字字符的缓冲区(默认编码为 utf8),这与获取每个字符的 ASCII 码相同:

[...Buffer("hello")] // [ 104, 101, 108, 108, 111 ]

(n % 26 + x + 7) % 26 + 97) 是基于 ASCII 的凯撒密码算法 - 我猜你对这部分很熟悉。

因此,此块将字符串解释为 ASCII 码数组并将它们转换为相应的输出:

[...b(m)].map(x => (n % 26 + x + 7) % 26 + 97))

您可以使用字节值数组初始化 Buffer

Buffer([97]) // <Buffer 61>

您可以通过将 JavaScript 中的任何内容与空字符串连接来获得其字符串表示形式,因此 "" + b([97])Buffer([97]).toString() 相同。 Buffer#toString 将存储的字节解释为 unicode 字符:

"" + Buffer([97]) // 'a'

因此外层"" + b(/* ... */)的目的是将被操纵的ASCII码转回字母数字字符显示。