【发布时间】:2015-10-27 22:58:23
【问题描述】:
我有一堆十六进制值,在将它们写入文件之前,我必须将其转换为二进制数据。
我将十六进制字符串转换为整数数组,然后将每个整数转换为字符:
// 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 个字符,当然不是t 我的期望。
所以我有:
512 对十六进制值 -> 512 个整数 -> 512 个字符 -> 我保存文件-> 684 个字符在文件中。
我做错了什么?我什至尝试将字符集添加到 blob 文件中,即:
var blob = new Blob([str], {type: "application/octet-stream;charset=UTF-8,"});
但没有成功。
编辑:
原始十六进制:
保存的文件:
【问题讨论】:
-
I trasformed the hex string in an array of integers- 这段未显示的“代码”是您最有可能犯一两个错误的地方 -
我不这么认为,如果我将 str 打印到控制台中,我可以看到正确的值。顺便说一句,我也会修改我的问题并添加该部分!
-
我误解了哪个数字代表什么,哪个是正确的,哪个是错误的 - 抱歉
-
@rikpg 你能打开文件并将内容与你的十六进制内容进行比较吗?这可能会给你一个线索。
-
@rikpg 解释了一切。您正在将二进制文件编写为文本。它将字节转换为 UTF8 中的字符。 latin1 中的 C0 是 UTF8 中的 C3 80。使用二进制模式保存文件。
标签: javascript binary hex blob