我在 codefights 上找到了这个巧妙的凯撒密码解决方案。我试图了解缓冲区在这里做什么。
b=Buffer
caesarian = (m, n) =>
"" + b([...b(m)].map(x => (n % 26 + x + 7) % 26 + 97))
空字符串可以像那样与类型化数组连接吗?
最佳答案
迭代 Node.js Buffer
一次产生一个字节的数据。对于包含字母数字字符的 Buffer(默认编码为 utf8),这与获取每个字符的 ASCII 码相同:
[...Buffer("hello")] // [ 104, 101, 108, 108, 111 ]
(n % 26 + x + 7) % 26 + 97)
是基于 ASCII 的凯撒密码算法 - 我想您对这部分很熟悉。
所以,这个 block 将字符串解释为一个 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码转回字母数字字符显示。
关于javascript - 缓冲区使用说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40075564/