私の元の答えは間違っていました- xxdどちら-pか-rを受け入れることはできません-b...
他の回答が実行可能であり、「別の方法」のために、以下についてはどうでしょうか。
入力
$ cat instructions.txt
00000000000000000000000000010011
00000010110100010010000010000011
00000000011100110000001010110011
00000000011100110000010000110011
00000000011100110110010010110011
00000000000000000000000000010011
出力
$ hexdump -Cv < instructions.bin
00000000 00 00 00 13 02 d1 20 83 00 73 02 b3 00 73 04 33 |...... ..s...s.3|
00000010 00 73 64 b3 00 00 00 13 |.sd.....|
00000018
Bashパイプライン:
cat instructions.txt \
| tr -d $'\n' \
| while read -N 4 nibble; do
printf '%x' "$((2#${nibble}))"; \
done \
| xxd -r -p \
> instructions.bin
cat -不要ですが、明確にするために使用されます
tr -d $'\n' -入力からすべての改行を削除します
read -N 4 nibble- 正確に 4x文字をnibble変数に読み込みます
printf '%x' "$((2#${nibble}))" ニブルをバイナリから1×16進文字に変換します
$((2#...)) -指定された値を基数2(バイナリ)から基数10(10進数)に変換します
printf '%x' -指定された値を10進数(10進数)から16進数(16進数)にフォーマットします
xxd -r -p-リバース(-r)プレーンダンプ(-p)-16進数からrawバイナリへ
Python:
python << EOF > instructions.bin
d = '$(cat instructions.txt | tr -d $'\n')'
print(''.join([chr(int(d[i:i+8],2)) for i in range(0, len(d), 8)]))
EOF
- 引用符で囲まれていないheredoc(
<< EOF)は、Pythonコードにコンテンツを取得するために使用されます
catおよびtr-クリーンな(1行の)入力を取得するために使用
range(0, len(d), 8)-0から文字列の末尾までの数字のリストを取得dし、一度に8文字ずつステップします。
chr(int(d[i:i+8],2))-現在のスライス(d[i:i+8])を2進数から10進数(int(..., 2))に変換し、次に生の文字(chr(...))に変換します
[ x for y in z]- リストの理解
''.join(...) -文字のリストを単一の文字列に変換します
print(...) -印刷する