javascript - 缓冲区使用说明

标签 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))

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

最佳答案

迭代 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/

相关文章:

javascript - 上一个和下一个按钮

javascript - 如何在 jQuery 中获取具有特定 ValidationGroup 的文本框?

node.js - 两个通配符路由在 react 路由中意味着什么?

node.js - 如何正确找到 .txt 文件并使用 NodeJS 读取其内容

node.js - 具有 Azure 功能的无服务器框架

javascript - jQuery 追加 x 元素列表

php - 如何创建带有返回 URL 的 Facebook 共享链接?

c - 将来自多个函数的数据存储在数组中

java - 打印数组错误

javascript - 如何使用 underscore.js 编辑具有字符串键值对的对象数组中的字符串?