문자열을 이진으로 변환하는 방법은 무엇입니까?
저는 파이썬에서 문자열의 이진 표현을 얻을 수 있는 방법이 필요합니다.
st = "hello world"
toBinary(st)
이것을 하는 깔끔한 방법의 모듈이 있습니까?
이런 거?
>>> st = "hello world"
>>> ' '.join(format(ord(x), 'b') for x in st)
'1101000 1100101 1101100 1101100 1101111 100000 1110111 1101111 1110010 1101100 1100100'
#using `bytearray`
>>> ' '.join(format(x, 'b') for x in bytearray(st, 'utf-8'))
'1101000 1100101 1101100 1101100 1101111 100000 1110111 1101111 1110010 1101100 1100100'
이진법이 의미하는 경우bytes
type. 전달된 인코딩 유형을 사용하여 문자열을 바이트 개체로 인코딩하는 문자열 개체의 메서드를 사용할 수 있습니다.올바른 인코딩을 전달해야 합니다.encode
기능.
In [9]: "hello world".encode('ascii')
Out[9]: b'hello world'
In [10]: byte_obj = "hello world".encode('ascii')
In [11]: byte_obj
Out[11]: b'hello world'
In [12]: byte_obj[0]
Out[12]: 104
그렇지 않으면, 만약 당신이 그것들이 0과 1의 형태로 -- 이진 표현--을 원한다면 당신은 먼저 당신의 문자열을 바이트 배열로 변환할 수 있습니다. 그 다음에 사용할 수 있습니다.bin
내에서 기능하는.map
:
>>> st = "hello world"
>>> map(bin,bytearray(st))
['0b1101000', '0b1100101', '0b1101100', '0b1101100', '0b1101111', '0b100000', '0b1110111', '0b1101111', '0b1110010', '0b1101100', '0b1100100']
또는 참여할 수 있습니다.
>>> ' '.join(map(bin,bytearray(st)))
'0b1101000 0b1100101 0b1101100 0b1101100 0b1101111 0b100000 0b1110111 0b1101111 0b1110010 0b1101100 0b1100100'
python3에서는 다음에 대한 인코딩을 지정해야 합니다.bytearray
함수:
>>> ' '.join(map(bin,bytearray(st,'utf8')))
'0b1101000 0b1100101 0b1101100 0b1101100 0b1101111 0b100000 0b1110111 0b1101111 0b1110010 0b1101100 0b1100100'
사용할 수도 있습니다.binascii
python 2의 모듈:
>>> import binascii
>>> bin(int(binascii.hexlify(st),16))
'0b110100001100101011011000110110001101111001000000111011101101111011100100110110001100100'
hexlify
이진 데이터의 16진수 표현을 반환한 다음 16을 기준으로 지정하여 int로 변환할 수 있습니다.bin
.
암호화만 하면 됩니다.
'string'.encode('ascii')
다음을 사용하여 문자열의 문자에 대한 코드 값에 액세스할 수 있습니다.ord()
내장 기능만약 당신이 이것을 이진법으로 포맷해야 한다면,string.format()
방법이 그 일을 할 것입니다.
a = "test"
print(' '.join(format(ord(x), 'b') for x in a))
(그 코드 스니펫을 게시해 준 Ashwini Chaudhary에게 감사합니다.)
위의 코드는 Python 3에서 작동하지만 UTF-8 이외의 인코딩을 가정할 경우 이 문제는 더 복잡해집니다. Python 2에서 문자열은 바이트 시퀀스이며 기본적으로 ASCII 인코딩을 가정합니다.파이썬 3에서는 문자열이 유니코드로 가정되며, 별도의bytes
Python 2 문자열과 더 유사하게 작동하는 유형입니다.UTF-8 이외의 인코딩을 가정하려면 인코딩을 지정해야 합니다.
Python 3에서는 다음과 같은 작업을 수행할 수 있습니다.
a = "test"
a_bytes = bytes(a, "ascii")
print(' '.join(["{0:b}".format(x) for x in a_bytes]))
UTF-8 인코딩과 ASCII 인코딩의 차이는 단순한 영숫자 문자열의 경우에는 분명하지 않지만 ASCII 문자 집합에 없는 문자를 포함하는 텍스트를 처리하는 경우에는 중요합니다.
Python 버전 3.6 이상에서는 f-string을 사용하여 결과를 포맷할 수 있습니다.
str = "hello world"
print(" ".join(f"{ord(i):08b}" for i in str))
01101000 01100101 01101100 01101100 01101111 00100000 01110111 01101111 01110010 01101100 01100100
콜론의 왼쪽 또는 (i)는 값이 형식화되어 출력에 삽입될 실제 객체입니다.or()를 사용하면 단일 문자열에 대한 기본 10 코드 포인트를 얻을 수 있습니다.
콜론의 오른쪽은 형식 지정자입니다. 08은 폭 8, 0 패딩을 의미하며 b는 base 2(2진수)에서 결과 숫자를 출력하는 기호로 기능합니다.
def method_a(sample_string):
binary = ' '.join(format(ord(x), 'b') for x in sample_string)
def method_b(sample_string):
binary = ' '.join(map(bin,bytearray(sample_string,encoding='utf-8')))
if __name__ == '__main__':
from timeit import timeit
sample_string = 'Convert this ascii strong to binary.'
print(
timeit(f'method_a("{sample_string}")',setup='from __main__ import method_a'),
timeit(f'method_b("{sample_string}")',setup='from __main__ import method_b')
)
# 9.564299999998184 2.943955828988692
method_b는 모든 문자를 수동으로 정수로 변환한 다음 해당 정수를 이진 값으로 변환하는 대신 하위 수준의 함수 호출을 수행하므로 바이트 배열로 변환하는 데 훨씬 더 효율적입니다.
다음은 사용된 기존 답변에 대한 업데이트이며 더 이상 그런 방식으로 작동할 수 없습니다.
>>> st = "hello world"
>>> map(bin, bytearray(st))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: string argument without an encoding
위의 링크에서 설명한 것처럼 소스가 문자열인 경우 인코딩도 지정해야 합니다.
>>> map(bin, bytearray(st, encoding='utf-8'))
<map object at 0x7f14dfb1ff28>
''.join(format(i, 'b') for i in bytearray(str, encoding='utf-8'))
이제 0이 8비트에 도달하여 바이트를 형성하기 위해 추가되는 0이 없으므로 문자열로 되돌리기가 쉬우므로 추가된 0을 제거하는 복잡성을 피하기 위해 문자열로 되돌리기가 쉽습니다.
a = list(input("Enter a string\t: "))
def fun(a):
c =' '.join(['0'*(8-len(bin(ord(i))[2:]))+(bin(ord(i))[2:]) for i in a])
return c
print(fun(a))
언급URL : https://stackoverflow.com/questions/18815820/how-to-convert-string-to-binary
'programing' 카테고리의 다른 글
Django의 STATIC_URL과 STATIC_ROOT의 차이 (0) | 2023.05.11 |
---|---|
메이븐 "모듈" vs "프로젝트" (이클립스, m2이클립스 플러그인) (0) | 2023.05.11 |
디버그 모드에서 프로그램 실행 속도가 매우 느립니다. (0) | 2023.05.11 |
달러 기호($"string")는 무엇을 합니까? (0) | 2023.05.11 |
NODE.JS: 치명적 오류 - JS 할당 실패 - 대용량 엑셀 파일을 구문 분석하는 동안 메모리 부족 처리 (0) | 2023.05.11 |