Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 要在Node.js中缓冲的二进制字符串_Javascript_Node.js_Binary_Buffer - Fatal编程技术网

Javascript 要在Node.js中缓冲的二进制字符串

Javascript 要在Node.js中缓冲的二进制字符串,javascript,node.js,binary,buffer,Javascript,Node.js,Binary,Buffer,我试图通过将字符流解析为UTF-16编码,将0和1字符串转换为等效的Buffer 例如: var binary=“01010101000100010” 其结果将是以下缓冲区 <Buffer 55 54> 请注意Buffer.from(string,“binary”)无效,因为它创建了一个缓冲区,其中每个0或1被解析为自己的拉丁单字节编码字符串。从Node.js文档中: “latin1”:将缓冲区编码为单字节编码字符串的一种方式(如RFC 1345第63页IANA中的定义,为L

我试图通过将字符流解析为UTF-16编码,将
0
1
字符串转换为等效的
Buffer

例如:

var binary=“01010101000100010”
其结果将是以下缓冲区

<Buffer 55 54>

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

“latin1”:将缓冲区编码为单字节编码字符串的一种方式(如RFC 1345第63页IANA中的定义,为Latin-1补充块和C0/C1控制代码)

“binary”:latin1的别名

  • 使用“.match”查找所有16位的组
  • 使用parseInt将二进制字符串转换为数字
  • 创建UINT16阵列并将其转换为缓冲区
在节点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"))
  • 使用“.match”查找所有16位的组
  • 使用parseInt将二进制字符串转换为数字
  • 创建UINT16阵列并将其转换为缓冲区
在节点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"))

您可以从该()生成一个十六进制字符串,并使用
Buffer.from(hexStr,“HEX”)
。顺便说一下,您的示例是错误的,
0101010101010100
5554
,其中有7个额外的位。您可以从中()生成十六进制字符串,并使用
Buffer.from(hextstr,“HEX”)
。顺便说一句,您的示例是错误的,
0101010100
5554
,其中有7个额外的位。