我正在从一个长十六进制字符串创建一个缓冲区但是会出现一些不匹配的错误(当我尝试解密它时)。果然,当我运行以下代码时:
var hexData = fs.readFileSync(fileName).toString().trim();
var bufferData = new Buffer(hexData, 'hex');
console.log(Buffer.byteLength(hexData, 'hex'));
console.log(bufferData.length);
我的输出是:
232548
30
为什么整个字符串没有加载到缓冲区?
编辑:我注意到我很傻,应该做var bufferData = fs.readFileSync(fileName, 'hex');
但 的长度为930194
!
答案 0 :(得分:2)
假设您在构建hexData
时意味着data
而不是bufferData
,Buffer.byteLength
似乎很乐意接受格式错误的十六进制,而Buffer
构造函数会将其删除超出缓冲区。考虑:
> Buffer.byteLength('ff00junk', 'hex')
4
> var b = new Buffer('ff00junk', 'hex')
> b.length
2
> b
<Buffer ff 00>
也许您的文件包含无效的十六进制文件?