Node.js中Buffer调用toString('binary')乱码?如何查看原始二进制?
如何查看Buffer中的原始二进制(0和1)及问题原因
为什么toString('binary')无法实现需求
你用的imageBuffer.toString('binary')根本不是输出二进制位的0和1。Node.js里的Buffer.toString('binary')本质是把每个字节按照Latin-1(ISO-8859-1)编码转成对应字符,每个字节对应一个字符,但多数字节对应的是不可打印字符,所以输出就是你看到的乱码,完全和原始二进制位无关。
查看原始0和1的实现方法
要获取原始的二进制位序列,你需要把Buffer里的每个字节转换成8位的二进制字符串,再拼接起来。以下是两种实用写法:
方法1:输出连续的二进制字符串
const fs = require('fs'); const imageBuffer = fs.readFileSync('path/to/image.jpg'); function bufferToBinaryString(buffer) { return buffer.reduce((result, byte) => { // 把单个字节转成8位二进制,不足8位补前导零 return result + byte.toString(2).padStart(8, '0'); }, ''); } const binaryString = bufferToBinaryString(imageBuffer); console.log(binaryString);
方法2:按字节分段输出(更易读)
如果觉得连续字符串太长,可以给每个字节的二进制加空格分隔:
const fs = require('fs'); const imageBuffer = fs.readFileSync('path/to/image.jpg'); function bufferToBinaryWithSpaces(buffer) { return buffer.map(byte => byte.toString(2).padStart(8, '0')).join(' '); } console.log(bufferToBinaryWithSpaces(imageBuffer));
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

