내 원래의 대답은 정확 - 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
배쉬 파이프 라인 :
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 (2 진)에서 기수 10 (10 진)으로 변환
printf '%x'
-주어진 값을 10 진수 10 진수에서 16 진수 16 진수로 지정
xxd -r -p
-16 진에서 원시 이진 -r
으로 일반 덤프 ( -p
)를 반대로 ( )
파이썬 :
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
-깨끗한 (한 줄) 입력을 얻는 데 사용됩니다.
range(0, len(d), 8)
-0에서 문자열 끝까지의 숫자 목록을 가져와 한 번 d
에 8x 문자 씩 밟습니다.
chr(int(d[i:i+8],2))
-현재 슬라이스 ( d[i:i+8]
)를 이진수에서 십진수 ( int(..., 2)
) 로 변환 한 다음 원시 문자 ( chr(...)
)로 변환
[ x for y in z]
- 목록 이해
''.join(...)
-문자 목록을 단일 문자열로 변환
print(...)
-인쇄