我在codefights上找到了这个巧妙的凯撒密码解决方案。我试图了解缓冲区在这里做了什么。
b=Buffer
caesarian = (m, n) =>
"" + b([...b(m)].map(x => (n % 26 + x + 7) % 26 + 97))
空字符串可以与类型化的数组连接吗?
答案 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代码转换回字母数字字符以供显示。