Command-Line-Interface

通過命令行將十六進制值寫入文件(不是 ascii 值)

  • July 4, 2018

我想知道是否有人知道允許我直接將十六進制值寫入文件的命令行實用程序。這樣當文件的十六進制轉儲完成時,我輸入的值就會被吐出。我直接寫入十六進制是至關重要的,因為我需要寫入的許多值沒有任何與它們關聯的 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  ()
{
   local i
   while [ "$1" ]; do
       for ((i=0; i<${#1}; i+=2))
       do
           printf "\x${1:i:2}";
       done;
       shift;
   done
}

替代實現:

writehex  ()
{
   local arg, i
   for arg; do
       for ((i=0; i<${#arg}; i+=2))
       do
           printf "\x${arg:i:2}"
       done
   done
}

要測試它:

$ 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

另一種選擇是使用xxd.

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

編輯:

此外,您可以使用該-p選項來接受一些自由格式的輸入數據:

$ 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:

修改了上面的函式以處理多個輸入參數(由空格分隔的十六進制數字字元串)。

引用自:https://serverfault.com/questions/193952