【问题标题】:Javascript: how to convert hex data to binary and write it into a fileJavascript:如何将十六进制数据转换为二进制并将其写入文件
【发布时间】: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");

但是出了点问题:如果我打印 byteslengthstr 的长度,我有相同的值 (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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2015-08-03
    • 2013-02-19
    • 2013-05-28
    • 2016-08-28
    相关资源
    最近更新 更多