ASCII를 이진으로, 이진을 ASCII로 변환하는 데 유용한 도구는 무엇입니까?
나는 다음과 같은 것을 바랐다.
$ echo --binary "This is a binary message"
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
또는 더 현실적인 :
$ echo "This is a binary message" | ascii2bin
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
또한 그 반대도 마찬가지입니다.
$ echo "01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101" | bin2ascii
This is a binary message
추신 : 나는 bash를 사용하고있다.
PS2 : 잘못된 바이너리를 얻지 않기를 바랍니다.
답변
$ echo AB | perl -lpe '$_=unpack"B*"'
0100000101000010
$ echo 0100000101000010 | perl -lpe '$_=pack"B*",$_'
AB
-e expression
주어진 표현을 다음과 같이 평가하십시오perl
코드-p
:sed
모드. 표현식 에 기억 광고의 내용과, 각 입력 라인에 대해 평가되는$_
변수 및 평가 후 인쇄 식 .-l
: 훨씬 더 좋아sed
: 전체 줄 대신 줄의 내용 (즉, 줄 구분 기호 없음) 만$_
있고 줄 바꿈은 출력에 다시 추가됩니다. 따라서 코드가 아닌 코드를 제외하고는perl -lpe code
작동 합니다.sed code
perl
sed
합니다.unpack "B*"
에 작동$_
기본적으로 변수 하고 내용을 첫 번째 바이트의 최상위 비트에서 마지막 바이트의 최하위 비트까지 걷는 비트 문자열로 추출합니다.pack
의 반대를 수행unpack
합니다. 자세한 내용perldoc -f pack
을 참조하십시오.
공백이있는 경우 :
$ echo AB | perl -lpe '$_=join " ", unpack"(B8)*"'
01000001 01000010
$ echo 01000001 01000010 | perl -lape '$_=pack"(B8)*",@F'
AB
(입력이 8 비트 블록 (0 패딩) 인 것으로 가정합니다).
을 사용하면 unpack "(B8)*"
한 번에 8 비트를 추출하고 공백으로 결과 문자열을 조인합니다 join " "
.
답변
xxd
ASCII 및 이진을 변환 하는 데 사용할 수 있습니다 .
$ echo -n "A" | xxd -b
0000000: 01000001 A
$ echo -n "A" | xxd -b | awk '{print $2}'
01000001
베이스 변환
16 진수, 8 진수 및 12 월 사이에 기본 변환을 수행하려는 경우 일반적으로 기본 계산기 명령 줄 도구 ( bc
)를 사용하여 이러한 작업을 수행합니다. bc
항상 올바른 염기 순서에 대해 매우 까다 롭다는 점 에 유의 하십시오. 먼저 결과 염기 ( obase
) 를 지정한 다음을 선택해야합니다 ibase
.
$ echo "obase=2; ibase=16; A" | bc
1010
$ echo "obase=16; ibase=2; 1010" | bc
A
답변
bc 및 bash 사용 :
#!/bin/bash
chrbin() {
echo $(printf \\$(echo "ibase=2; obase=8; $1" | bc))
}
ordbin() {
a=$(printf '%d' "'$1")
echo "obase=2; $a" | bc
}
ascii2bin() {
echo -n $* | while IFS= read -r -n1 char
do
ordbin $char | tr -d '\n'
echo -n " "
done
}
bin2ascii() {
for bin in $*
do
chrbin $bin | tr -d '\n'
done
}
ascii2bin "This is a binary message"
bin2ascii 01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
답변
바이너리를 ASCII로 변환하는 셸 솔루션 :
bin2ascii() { { tr -cd 01 | fold -w8; echo; } | sed '1i obase=8; ibase=2' | bc | sed 's/^/\\/' | tr -d '\n' | xargs -0 echo -e; }
답변
[ -~]
Python 2 범위의 ASCII 문자 :>>> import binascii >>> bin(int(binascii.hexlify('hello'), 16)) '0b110100001100101011011000110110001101111'
반대로:
>>> n = int('0b110100001100101011011000110110001101111', 2) >>> binascii.unhexlify('%x' % n) 'hello'
파이썬 3.2 이상에서 :
>>> bin(int.from_bytes('hello'.encode(), 'big')) '0b110100001100101011011000110110001101111'
반대로:
>>> n = int('0b110100001100101011011000110110001101111', 2) >>> n.to_bytes((n.bit_length() + 7) // 8, 'big').decode() 'hello'
답변
파이썬 3 사용하기 :
#!/usr/bin/env python3
import sys
if __name__ == "__main__":
if len(sys.argv) != 1 and len(sys.argv) <= 3:
if sys.argv[1] in ('-b', '--binary'):
n = int(sys.argv[2].replace(' ', ''), 2)
print(n.to_bytes((n.bit_length() + 7) // 8, 'big').decode())
if sys.argv[1] in ('-a', '--ascii'):
print((bin(int.from_bytes(sys.argv[2].encode(), 'big')))[2:])
else:
print("Example: decode -b '10000001'")
예를 들어 “bin2ascii”로 저장되었습니다.
$ bin2ascii -a "Hello, world!"
1001000011001010110110001101100011011110010110000100000011101110110111101110010011011000110010000100001
$ bin2ascii -b 1001000011001010110110001101100011011110010110000100000011101110110111101110010011011000110010000100001
Hello, world!
답변
base64로 이진 인코딩
$ echo "This is a binary message" | base64
VGhpcyBpcyBhIGJpbmFyeSBtZXNzYWdlCg==
base64 디코딩
$ echo "VGhpcyBpcyBhIGJpbmFyeSBtZXNzYWdlCg==" | base64 -d
This is a binary message