Conversion

是否有任何 linux 實用程序可以創建文件的普通二進制轉儲,反之亦然?

  • September 13, 2021

我想知道是否有任何 linux 實用程序或程序用於生成普通的二進制轉儲並將其反轉回原始文件(因為xxd能夠使用-r參數來實現)?我試過xxd了,它可以選擇反轉到原始文件,但它只列印普通的十六進制轉儲。

如果上述情況不可行,是否有任何實用程序可將純十六進製字元串(範例:)轉換hx829jdxkdiei為純二進制。在 Windows 上有一些程序,如 010 Editor,但我找不到任何用於命令行 linux 的程序。

您可以隨時使用perl

perl -ple 'BEGIN{$/=\8} $_=unpack("B*")' < file > file.dump

B用於將 0x1 8 位字節(八位字節)轉儲為00000001;替換b為獲取10000000

撤銷:

perl -pe '$_=pack("B*", $_)' < file.dump > file

例子:

$ printf %s hx829jdxkdiei | perl -ple 'BEGIN{$/=\8}$_=unpack("B*")'
0110100001111000001110000011001000111001011010100110010001111000
0110101101100100011010010110010101101001
$ printf %s hx829jdxkdiei | perl -ple 'BEGIN{$/=\8}$_=unpack("B*")' |
   perl -pe '$_=pack("B*", $_)'
hx829jdxkdiei

對於十六進制轉儲到二進制轉儲:

$ echo ff0aa0ff | perl -ple '$_=unpack("B*", pack("H*",$_))'
11111111000010101010000011111111
$ printf %s hx829jdxkdiei | xxd -p -c8 | perl -ple '$_=unpack("B*", pack("H*",$_))'
0110100001111000001110000011001000111001011010100110010001111000
0110101101100100011010010110010101101001

zsh另請參閱:

$ string=hx829jdxkdiei
$ set +o multibyte -o extendedglob
$ bin=${string//(#m)?/${(l[8][0])$(( [##2] ##$MATCH ))}}
$ print -r -- $bin
01101000011110000011100000110010001110010110101001100100011110000110101101100100011010010110010101101001
$ print ${bin//(#m)?(#c8)/${(#):-"2#$MATCH"}}
hx829jdxkdiei

在哪裡

  • $(( ##x ))為您提供字元的值xwchar_t帶有multibyte選項的值,否則為字節值)。
  • $(( [##2] expression ))以二進制形式擴展算術表達式的結果(不帶2#前綴)。
  • ${(l[8][0])param} left 用 0 將參數擴展填充到長度 8。
  • ${(#)param}輸出其值儲存在$param(reverse of $(( ##x ))) 中的字元。

如果您只想轉儲到十六進制,我會使用hexdump, 或xxd.

但是,您提到了 010 Editor,它是一個十六進制編輯器。Linux 有很多十六進制編輯器。例如,請參閱Arch wiki 的這一部分,或此 Wikipedia 頁面

引用自:https://unix.stackexchange.com/questions/668643