如何在bash中仅包含十六进制字符的文件创建十六进制转储?


Answers:


250

xxd -p file

或者,如果您想全部放在一行上:

xxd -p file | tr -d '\n'


13
fyi要撤消该过程,请执行以下操作:xxd -r -ps hexascii.txt文件(可以使用换行符也可以不使用换行符)
Curtis Yallop 2014年

92

格式字符串可以使hexdump的行为完全符合您的期望(完全没有空格,逐字节):

hexdump -ve '1/1 "%.2x"'

1/1表示“每种格式只应用一次并占用一个字节”,并且"%.2x"是实际的格式字符串,例如在printf中。在这种情况下:2个字符的十六进制数,如果较短则以零开头。


7
您需要一个-v,否则它将丢弃重复的字节并将其替换为星号。
暂停,直到另行通知。

2
我想知道hexdump本身是否能够将换行符(仅)附加到输出的末尾。(明显的附加符; echo使得它无法用作bash别名)
mykhal 2015年

2
我的别名:alias to_hex="hexdump -ve '1/1 \"%.2x\"' && echo"
devstuff

迭代计数和字节计数默认为1,因此可以省略1/1,从而使hexdump -ve '"%.2x"'
Alex Che

@mykhal,有可能,如果您知道输出中的字节数。假设您使用hexdump仅输出13个首字节:hexdump -n 13 -e '13/1 "%.2x" "\n"'
Alex Che


10

Perl一线:

perl -e 'local $/; print unpack "H*", <>' file

已验证。匹配“ xxd -p文件| tr -d'\ n'”。
柯蒂斯·雅洛普

1
fyi可以逆转该过程:perl -e'local $ /; 打印包“ H *”,<>'<hexascii.txt>文件
Curtis Yallop,

不需要“本地$ /”。
柯蒂斯·雅洛普

更新至最新评论:“本地”不需要“ pack”。对于解压缩,您需要它,但也可以放入“ undef $ /”。$ /是行分隔符(默认为NL)。undefined将其置于slurp模式。因此,在字符串上下文中引用的<>会提取整个二进制文件而不将其解析成几行。
柯蒂斯·雅洛普

备用格式:perl -e'print unpack“ H *”,join(“”,<>)'<file
Curtis Yallop 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.