javascript - Node.js 中缓冲区的二进制字符串
问题描述
我试图通过将字符流解析为 UTF-16 编码来将字符串转换为等价物0
。1
Buffer
例如:
var binary = "01010101010101000100010"
结果将是以下缓冲区
<Buffer 55 54>
请注意Buffer.from(string, "binary")
这是无效的,因为它创建了一个缓冲区,其中每个人0
或被1
解析为它自己的拉丁单字节编码字符串。从 Node.js 文档:
'latin1':一种将 Buffer 编码为单字节编码字符串的方法(如 IANA 在 RFC 1345 第 63 页中定义的那样,作为 Latin-1 补充块和 C0/C1 控制代码)。
'binary':'latin1' 的别名。
解决方案
- 使用 "".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"))
推荐阅读
- java - 使用字符串有效负载触发 AWS Lambda 函数
- stream - Dart / rxdart / Bloc:在监听 BehaviorSubject 的流时接收具有原始类型的事件项
- hyperledger-fabric - 在不同的服务器上迁移订购者(IBM-Hyperledger Fabric 1.1)
- python - `json.loads()` 和 `.apply(json.loads)` 有什么区别?
- r - 将 dbl 舍入为最接近的整数并转换为 R 中的有序因子
- postgresql - 使用 psql 将 .sql 文件导入 postgres
- javascript - 如何将通配符与 Firestore 侦听器一起使用?(在快照上)
- json - 在 elasticsearch 和 Kibana 中导入 .log 文件
- c - 在 fread() 和 fwrite() 库调用期间是否发送了中断信号?
- c - BST 中的二叉搜索树