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");
但出了点问题:如果我打印 bytes
的 length
和 str
的长度,我有相同的值 (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");
我有一堆十六进制值,在将它们写入文件之前我必须将其转换为二进制数据。
我将十六进制字符串转换为整数数组,然后将每个整数转换为字符:
// bytes contains the integers
str = String.fromCharCode.apply(String, bytes);
现在我创建 blob 文件并下载它:
var blob = new Blob([str], {type: "application/octet-stream"});
saveAs(blob, "file.bin");
但出了点问题:如果我打印 bytes
的 length
和 str
的长度,我有相同的值 (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");