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

Javascript: how to convert hex data to binary and write it into a file

我有一堆十六进制值,在将它们写入文件之前我必须将其转换为二进制数据。

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

// bytes contains the integers
str = String.fromCharCode.apply(String, bytes);

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

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

但出了点问题:如果我打印 byteslengthstr 的长度,我有相同的值 (512),但是文件包含 684 个字符,当然这不是我所期望的。

所以我有:

512 对十六进制值 -> 512 个整数 -> 512 个字符 -> 我保存文件 -> 684 个文件内的字符。

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

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

但没有成功。

编辑:

原始十六进制:

保存的文件:

感谢 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");