【问题标题】:String of Binary to Buffer in Node.jsNode.js 中缓冲区的二进制字符串
【发布时间】:2020-05-10 08:41:58
【问题描述】:

我正在尝试通过将字符流解析为 UTF-16 编码,将 01 的字符串转换为等效的 Buffer

例如:

var binary = "01010101010101000100010"

结果将是以下缓冲区

<Buffer 55 54>

请注意Buffer.from(string, "binary") 无效,因为它创建了一个缓冲区,其中每个01 都被解析为自己的拉丁单字节编码字符串。来自 Node.js 文档:

'latin1':将​​ Buffer 编码为单字节编码字符串的一种方式(由 IANA 在 RFC 1345 第 63 页中定义,作为 Latin-1 补充块和 C0/C1 控制代码)。

'binary':'latin1' 的别名。

【问题讨论】:

  • 您可以从中生成一个十六进制字符串 (here is an example) 并使用 Buffer.from(hexStr, "hex")。顺便说一句,你的例子是错误的,01010101010101005554,你有 7 个额外的位。

标签: javascript node.js binary buffer


【解决方案1】:
  • 使用 "".match 查找所有 16 位组。
  • 使用 parseInt 将二进制字符串转换为数字
  • 创建一个 Uint16Array 并将其转换为 Buffer

在节点 10.x 上测试

function binaryStringToBuffer(string) {
    const groups = string.match(/[01]{16}/g);
    const numbers = groups.map(binary => parseInt(binary, 2))

    return Buffer.from(new Uint16Array(numbers).buffer);
}

console.log(binaryStringToBuffer("01010101010101000100010"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2014-02-21
    • 1970-01-01
    • 2010-09-06
    • 2011-09-20
    • 2015-05-19
    • 1970-01-01
    相关资源
    最近更新 更多