내 원래의 대답은 정확 - 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(...) -인쇄