Linux
如何將二值文本數據轉換為二進制(位表示)
我有一個文本文件,其中
two (2)
只有可能的字元(可能還有新行\n
)。例子:ABBBAAAABBBBBABBABBBABBB
(尺寸
24 bytes
)如何將其轉換為二進製文件,即位表示,兩個可能值中的每一個都分配給
0
or1
?生成的二進製文件 (
0=A
,1=B
):011100001111101101110111 # 24 bits - not 24 ASCII characters
生成的十六進製文件:
70FB77 # 3 bytes - not 6 ASCII characters
我最感興趣的是命令行解決方案(也許
dd
,xxd
,od
,tr
,printf
,bc
)。另外,關於逆:如何取回原來的?
另一個perl:
perl -pe 'BEGIN { binmode \*STDOUT } chomp; tr/AB/\0\1/; $_ = pack "B*", $_'
證明:
$ echo ABBBAAAABBBBBABBABBBABBB | \ perl -pe 'BEGIN { binmode \*STDOUT } chomp; tr/AB/\0\1/; $_ = pack "B*", $_' | \ od -tx1 0000000 70 fb 77 0000003
上面一次讀取一行輸入。您可以確保這些線條完全符合它們的預期。
**編輯:**反向操作:
#!/usr/bin/env perl binmode \*STDIN; while ( defined ( $_ = getc ) ) { $_ = unpack "B*"; tr/01/AB/; print; print "\n" if ( not ++$cnt % 3 ); } print "\n" if ( $cnt % 3 );
這一次讀取一個字節的輸入。
**編輯2:**更簡單的反向操作:
perl -pe 'BEGIN { $/ = \3; $\ = "\n"; binmode \*STDIN } $_ = unpack "B*"; tr/01/AB/'
上面一次讀取 3 個字節
STDIN
(但EOF
在序列中間接收不是致命問題)。