2012-07-24 5 views
35

4 자 문자열이 있다고 가정하면이 문자열을 문자열의 각 문자가 해당하는 16 진수로 변환되는 바이트 배열로 변환하려고합니다. 예 :파이썬 : 문자열을 바이트 배열로 변환

str = "ABCD" 

내 출력이 작업을 수행 할 수있는 간단한 방법이 있나요

array('B', [41, 42, 43, 44]) 

로 얻으려고? 기능은 여기에 당신을 도울 수

+3

. 'B'타입의 bytearray는 1 바이트 정수를 포함하며, 항상 10 진수로 표현됩니다. –

답변

34

인코딩은 인코딩 문자열

In [44]: str = "ABCD" 

In [45]: [elem.encode("hex") for elem in str] 
Out[45]: ['41', '42', '43', '44'] 

또는 사용할 수있는 배열 모듈

In [49]: import array 

In [50]: print array.array('B', "ABCD") 
array('B', [65, 66, 67, 68]) 
+0

그러나 볼 수 있듯이, 배열 모듈은 문자열 요소의 ascii 값을 제공합니다. 이는 예상 출력과 일치하지 않습니다. – avasal

+0

감사합니다. 이 아이디어들은 나와 함께 일할 수있는 충분한 기회를 제공합니다! – Alex

+0

'map'을 쓰지 않는 이유는 무엇입니까? – pradyunsg

2
s = "ABCD" 
from array import array 
a = array("B", s) 

당신이 원하는 경우의 인코딩 된 버전을 반환 진수 :

print map(hex, a) 
22

그냥을 사용하십시오.은 바이트 목록입니다.

Python2 :

s = "ABCD" 
b = bytearray() 
b.extend(s) 

Python3 : 그 내장이기 때문에

그런데
s = "ABCD" 
b = bytearray() 
b.extend(map(ord, s)) 

는 변수 이름으로 str을 사용하지 마십시오.

+0

이것은 3.4 절에서 깨졌습니다 :'TypeError : 정수가 필요합니다 ' –

+0

@KevanAhlquist my bad. 지금 고쳤습니다. – Pithikos

+0

파이썬 3의 경우 이것은 더 깨끗해진다 : 's = "ABCD"', 'b = bytearray()', 'b.extend (s.encode()) –

3

바이트 배열을 얻는 대신 ASCII로 문자열을 인코딩 할 수도 있습니다 : b=s.encode('ascii').

이 나를 위해 작동
4

(파이썬 2)

s = "ABCD" 
b = bytearray(s) 

# if your print whole b, it still displays it as if its original string 
print b 

# but print first item from the array to see byte value 
print b[0] 

참조 : 당신이 원하는 것은 적어도이 정확한 형태로 수 없습니다 http://www.dotnetperls.com/bytes-python

관련 문제