Conversion
是否有任何 linux 實用程序可以創建文件的普通二進制轉儲,反之亦然?
我想知道是否有任何 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 ))
為您提供字元的值x
(wchar_t
帶有multibyte
選項的值,否則為字節值)。$(( [##2] expression ))
以二進制形式擴展算術表達式的結果(不帶2#
前綴)。${(l[8][0])param}
l
eft 用 0 將參數擴展填充到長度 8。${(#)param}
輸出其值儲存在$param
(reverse of$(( ##x ))
) 中的字元。
如果您只想轉儲到十六進制,我會使用
hexdump
, 或xxd
.但是,您提到了 010 Editor,它是一個十六進制編輯器。Linux 有很多十六進制編輯器。例如,請參閱Arch wiki 的這一部分,或此 Wikipedia 頁面。