Node.js中的二进制字符串转缓冲区

3
我将尝试把由 01 组成的字符串转换为相应的 Buffer,通过将字符流解析为 UTF-16 编码实现。
例如:
var binary = "01010101010101000100010"

那么结果就是以下缓冲区。
<Buffer 55 54>

请注意,Buffer.from(string, "binary")不是有效的方法,因为它会创建一个缓冲区,其中每个单独的01被解析为自己的Latin One-Byte编码字符串。来自Node.js文档的说明:

'latin1':将缓冲区编码为一个字节的编码字符串(由IANA在RFC 1345第63页中定义为Latin-1补充块和C0/C1控制代码)。

'binary':'latin1'的别名。


你可以从中生成一个十六进制字符串(这里有一个例子),然后使用Buffer.from(hexStr, "hex")。顺便说一下,你的例子是错误的,0101010101010100应该是5554,你多了7个额外的位。 - Titus
1个回答

5
  • 使用 "".match 来查找所有 16 位组。
  • 使用 parseInt 将二进制字符串转换为数字。
  • 创建一个 Uint16Array 并将其转换为缓冲区。

已在 node 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"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接