通过命令行将hex值写入文件(而不是ascii值)

我想知道是否有人知道一个命令行实用程序,这将允许我直接写入hex值的文件。 这样当文件的hexdump完成时,我input的值将被吐出。 直接写入hex是非常重要的,因为我需要编写的许多值没有任何与之相关的unicode或ascii等效字符。 寻找像这样的东西:

writehex f6050000 ac7e0500 02000800 01000000 newfile hexdump newfile hexdump 1.02 ts.event.1 00000000: f6050000 ac7e0500 02000800 01000000 .....~.......... 16 bytes read 

这个Bash函数应该为你工作:

 writehex () { while [ $1 ]; do for ((i=0; i<${#1}; i+=2)) do printf "\x${1:i:2}"; done; shift; done } 

testing它:

 $ writehex abc00001ff | hexdump -C 00000000 ab c0 00 01 ff |.....| 00000005 $ writehex f6050000 ac7e0500 02000800 01000000 | hexdump -C 00000000 f6 05 00 00 ac 7e 05 00 02 00 08 00 01 00 00 00 |.....~..........| 00000010 

另一个select是使用xxd

 $ echo hello | xxd 0000000: 6865 6c6c 6f0a $ echo hello | xxd | xxd -r hello 

编辑:

此外,您可以使用-p选项来接受有些自由格式的input数据:

 $ echo 'f6050000 ac7e0500 02000800 01000000' | xxd -r -p | hexdump -C 00000000 f6 05 00 00 ac 7e 05 00 02 00 08 00 01 00 00 00 |.....~..........| 00000010 

编辑2:

修改上面的函数来处理多个input参数(由空格分隔的hex数字的string)。

perl

 perl -ne '@a=split;for(@a){print chr(hex($_))}' inputfile > outputfile 

input文件的内容被格式化的地方:

 42 43 44 

outputfile将包含BCD 。 你可以像vi那样准备你的input文件:

 :%s/ //g :%s/\(.\{2\}\)/\1 /g 

这将删除所有空格,然后在每个字符之间插入一个空格。

你用perl行给出的例子:

 $ cat inputfile f6 05 00 00 ac 7e 05 00 02 00 08 00 01 00 00 00 $ hexdump outputfile 0000000 f6 05 00 00 ac 7e 05 00 02 00 08 00 01 00 00 00 0000010 

一个hex编辑器如hexedit或hexer? 您可以直接编辑文件并用hex键入值。