Javascript:如何将十六进制数据转换为二进制数据并将其写入文件
我有一堆十六进制值,在将它们写入文件之前,我必须将其转换为二进制数据 我将十六进制字符串转换为整数数组,然后将每个整数转换为字符:Javascript:如何将十六进制数据转换为二进制数据并将其写入文件,javascript,binary,hex,blob,Javascript,Binary,Hex,Blob,我有一堆十六进制值,在将它们写入文件之前,我必须将其转换为二进制数据 我将十六进制字符串转换为整数数组,然后将每个整数转换为字符: // 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 contains the integers
str = String.fromCharCode.apply(String, bytes);
现在,我创建blob文件并下载它:
var blob = new Blob([str], {type: "application/octet-stream"});
saveAs(blob, "file.bin");
但是出现了一些问题:如果我打印字节的长度和str的长度我有相同的值(512
),但是文件包含684个字符,当然这不是我所期望的
因此,我:
512十六进制值对->
512整数->
512字符->
我保存文件->
684文件中的字符
我做错了什么?我甚至尝试将字符集添加到blob文件中,即:
var blob = new Blob([str], {type: "application/octet-stream;charset=UTF-8,"});
但是没有成功
编辑:
原始十六进制:
保存的文件:
多亏了安德烈,我找到了解决方案:
我必须以二进制模式写入,因此:
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");
var ab=new ArrayBuffer(bytes.length)//bytes是包含整数的数组
var ia=新的UINT8阵列(ab);
对于(变量i=0;i
我将十六进制字符串转换为整数数组
-这段未显示的“代码”是您最有可能犯一两个错误的地方。我不这么认为,如果我将str打印到控制台中,我可以看到正确的值。顺便说一下,我将修改我的问题,添加该部分也!我误解了哪个数字意味着什么,哪些是正确的,哪些是错误的-sorry@rikpg你们能打开文件,把内容和你们的十六进制文件比较一下吗?这可能会给你一个线索。@rikpg这就解释了一切。您正在以文本形式编写二进制文件。它将字节转换为UTF8中的字符。拉丁文1中的C0是UTF8中的C3 80。使用二进制模式保存文件。