解析ASCII十六进制转储以正确转换为二进制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析ASCII十六进制转储以正确转换为二进制相关的知识,希望对你有一定的参考价值。

默认情况下,U-boot md.b(内存显示)命令生成的ASCII HEX内存转储包含具有相应ASCII文本转换的附加列。在将ascii hex dump转换为二进制之前,需要从dump清除额外的东西。没有ascii表,md.b不能生成转储。当我转换包含ascii表的原始十六进制转储时,我的输出文件明显比它应该大。

xxd -r -p input.txt output.bin

如何解析十六进制转储文件以删除ascii表,使正确的ascii十六进制输入正确转换为二进制?最好用linux xxd

编辑:十六进制转储的一部分。注意:转储顶部和底部的大区域是空的,数据位于中间的某个位置。

20000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
20000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
20000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
--------
20062270: 29 ef a3 43 3c ae 21 d8 25 ed 04 04 c0 cb 65 ad    )..C<.!.%.....e.
20062280: a5 60 19 98 65 ad 22 7d f2 14 5c bb 70 96 c7 6c    .`..e."}...p..l
20062290: 24 d0 fe 21 d0 48 f0 86 16 85 82 db 08 5a 67 c5    $..!.H.......Zg.
200622a0: 21 6f dc 6b a3 64 2b 53 64 98 15 27 46 d6 c1 39    !o.k.d+Sd..'F..9
200622b0: 59 ac ce 49 7c 0e be 00 7e cd da 8a ea fb 34 88    Y..I|...~.....4.
200622c0: e3 f3 fe b1 7b e9 16 b7 3a a2 6e 69 92 7b a7 a6    ....{...:.ni.{..
200622d0: a4 1e e8 c3 d1 58 b0 5a 25 cb 38 89 17 89 1f 27    .....X.Z%.8....'
200622e0: 8b ab 24 58 19 5d d6 1e 6c de a3 76 a1 c5 c4 0f    ..$X.]..l..v....
答案

以下命令提供正确的二进制转换:

xxd -r -seek -0x20000000 input.txt output.bin

xxd -r -p期望以普通的十六进制格式输入,不使用地址或ASCII。

xxd -r假设地址从零开始。

xxd -r -seek -0x20000000将寻求跳过转储中不存在的区域(第一个0x20000000 = 536870912字节)。

所有功劳都归功于lumato

以上是关于解析ASCII十六进制转储以正确转换为二进制的主要内容,如果未能解决你的问题,请参考以下文章

使用'xxd'进行二进制到ASCII转换

将十六进制转换为从文件 C++ 读取的 ASCII 的正确方法

从以十六进制编码的 ASCII 字符串转换为纯 ASCII?

10进制转换ascii

如何从 4 位十六进制转换为 7 位 ASCII?

使用任何开源代码或工具将大型机二进制文件转换为 Ascii