缓冲区使用说明

时间:2016-10-16 21:15:26

标签: javascript arrays node.js ecmascript-6 caesar-cipher

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

因此,这个chunk将String解释为ASCII代码数组并将它们转换为相应的输出:

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

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

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

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

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

因此,外部"" + b(/* ... */)的点是将操纵的ASCII代码转换回字母数字字符以供显示。