Javascript:如何将十六进制数据转换为二进制数并将其写入文件

rva*_*oni 4 javascript binary hex blob

我有一堆十六进制值,我必须先将其转换为二进制数据,然后再将它们写入文件.

我在一个整数数组中转换了十六进制字符串,然后我将每个整数转换为一个char:

// bytes contains the integers
str = String.fromCharCode.apply(String, bytes);
Run Code Online (Sandbox Code Playgroud)

现在我创建blob文件并下载它:

var blob = new Blob([str], {type: "application/octet-stream"});
saveAs(blob, "file.bin");
Run Code Online (Sandbox Code Playgroud)

但是出了点问题:如果我打印length出来bytes并且str我的长度有相同的值(512),但该文件包含684个字符,当然这不是我所期望的.

所以我有:

512对十六进制值 - > 512个整数 - > 512个字符 - >我保存文件 - > 684个字符在文件中.

我究竟做错了什么?我甚至尝试将字符集添加到blob文件中,即:

var blob = new Blob([str], {type: "application/octet-stream;charset=UTF-8,"});
Run Code Online (Sandbox Code Playgroud)

但没有成功.

编辑:

原始HEX:

原始HEX

保存的文件:

保存的文件

rva*_*oni 6

感谢Andrey我找到了解决方案:

我必须以二进制模式编写,所以:

var ab = new ArrayBuffer(bytes.length); //bytes is the array with the integer
var ia = new Uint8Array(ab);

for (var i = 0; i < bytes.length; i++) {
  ia[i] = bytes[i];
}

var blob = new Blob([ia], {type: "application/octet-stream"});
saveAs(blob, id + "_<?php echo $report['md5']; ?>.bin");
Run Code Online (Sandbox Code Playgroud)