26

我正在尝试输出与某些二进制数据相对应的 ASCII 值。我已成功应用该hexdump实用程序并排输出 hexdump 和 ASCII,如下所示:

00000120  20 20 20 20 3d 20 30 78  30 30 30 30 30 30 33 30  |    = 0x00000030|
00000130  0a 01 00 00 00 23 00 00  00 75 75 69 64 30 20 20  |.....#...uuid0  |
00000140  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3d  |               =|
00000150  20 30 78 39 30 38 32 61  63 35 61 0a 01 00 00 00  | 0x9082ac5a.....|
00000160  23 00 00 00 75 75 69 64  31 20 20 20 20 20 20 20  |#...uuid1       |
00000170  20 20 20 20 20 20 20 20  20 20 3d 20 30 78 37 34  |          = 0x74|
00000180  61 37 34 37 36 66 0a 01  00 00 00 23 00 00 00 75  |a7476f.....#...u|
00000190  75 69 64 32 20 20 20 20  20 20 20 20 20 20 20 20  |uid2            |
000001a0  20 20 20 20 20 3d 20 30  78 61 32 35 35 35 63 30  |     = 0xa2555c0|

但是,我希望只看到 ASCII 作为输出值。我对十六进制值不感兴趣。例如,输出应该如下(大约对应于上述):

= 0x00000030.....#...
uuid0=0x9082ac5a.....
uuid1=0x74a7476f

(我无法为此使用开关hd。)

4

4 回答 4

41

如果您只需要查看二进制文件的文本内容,字符串应该很有用:

对于给定的每个文件,GNUstrings打印至少 4 个字符长(或-n选项给出的数字)的可打印字符序列,并且后面跟一个不可打印字符。 strings主要用于确定非文本文件的内容。

于 2012-11-08T08:28:59.740 回答
12

虽然raina77ow关于该strings(1)命令的答案是获得您真正想要的结果的正确方法,但hexdump(1)在某些情况下,利用特定请求仅过滤掉可打印字符可能是有意义的。我将在此具体回应。

hexdump 实用程序支持惊人的通用格式化引擎。这样做可能是为了使各种可选格式的实现更加统一。如果您的 hexdump 副本通过-e命令行选项公开了该引擎(正如许多人所做的那样),那么您实际上可以让它按照您的要求进行操作。

关键是-e它支持的选项和格式化语言。该语言允许规范使用输入字节并生成文本的格式字符串。一个命令,例如:

$ hexdump -e "16 \"%_p\" \"\\n\"" hexdump.exe | head -16

将一次消耗 16 个字节,通过%_p格式显示它们,并在每个第 16 个字节后添加一个换行符。输出中的每个不可打印字符都被替换为 a .

其他要考虑的面向字符的格式是%_c%_u. 第一个用它们的 ANSI-C 转义序列或三位八进制数替换非打印字符。第二个用 ASCII 控制字符的常规名称或两位十六进制数替换非打印每个字符。

如果您的副本hexdump缺少-e选项,或者速度很慢,或者您根本没有实现,那么 William Ahern最近发布hexdump的自由许可、快速且合理可移植的实现值得一看。它应该为许多开箱即用的类 Unix 系统构建,并且只需稍作调整,它就可以在 Windows 上使用 MingW GCC 构建。此实现的一个关键属性是,单个源文件可以构建为共享库以包含在另一个程序中,作为 Lua 模块供Lua使用,以及实现该命令的独立可执行文件。hexdumphexdump

于 2013-04-03T00:04:57.403 回答
7

你可以使用od

od -t c file

或者awkhexdump这样:

hexdump -C file | awk '{for(i=NF; i>17; --i) print $i}'

注意:如果更改 hexdump 中的列数,则必须更改 awk 命令。

于 2012-11-08T07:40:12.233 回答
1
hexdump -C file /dev/sda4|cut -c 62-77

希望能帮助到你

于 2017-08-12T16:19:43.740 回答