2016-08-29 2 views
5

Base64 문자열을 바이트 배열 (또는 16 진수 값 배열)로 디코딩하는 파이썬 스크립트를 만듭니다.Base64 문자열을 바이트 배열로 디코드

내 프로젝트의 임베디드 쪽은 원시 바이트에서 시작하는 base64 문자열을 만드는 마이크로 컨트롤러입니다. 문자열에 인쇄 할 수없는 문자가 포함되어 있습니다 (이러한 이유 때문에 base64 인코딩을 선택했습니다).

Pc 쪽에서 나는 base64 문자열을 디코딩하고 원래의 원시 바이트를 복구해야합니다.

base64Packet = raw_input('Base64 stream:') 

packet = base64.b64decode(base64Packet) 

sys.stdout.write("Decoded packet: %s"%packet) 

결과 문자열이 일부없는 인쇄 가능한 문자가 포함 된 문자 문자열입니다

내 스크립트는 파이썬 2.7과 base64로 라이브러리를 사용합니다.

base64 문자열을 바이트 (또는 16 진수) 값으로 디코딩 할 수있는 방법이 있습니까?

미리 감사드립니다.

+0

이미 * 해당 * bytestring 있습니다. 어떤 결과물을 기대하고 있었으며 무엇을 보았습니까? 아마도 인쇄 할 때 대신'% r'을 사용하고 싶었을 것입니다. –

+0

@MartijnPieters : 디코딩 후 각 단일 바이트를 포함하는 파이썬 목록을 갖게됩니다. – Federico

+1

왜 필요한가요? 바이트를 조작해야합니까? 'str' 객체는 이미 시퀀스입니다. 각 바이트를'packet [index]'로 처리하거나,'for packet in byte : '를 사용하여 문자열을 반복 할 수 있습니다. –

답변

5

정확하게 이것을 위해 bytearray을 사용할 수 있습니다. 아마도 binascii 모듈과 struct이 도움이 될 수 있습니다.

import binascii 
import struct 

binstr=b"thisisunreadablebytes" 

encoded=binascii.b2a_base64(binstr) 
print encoded 
print binascii.a2b_base64(encoded) 

ba=bytearray(binstr) 
print list(ba) 

print binascii.b2a_hex(binstr) 
print struct.unpack("21B",binstr) 
+0

감사! 내 문제를 해결하기 위해 bytearray, binascii 및 struct 사용에 대한 예제를 제공 할 수 있습니까? 나는 파이썬의 주인이 아니다! – Federico

+0

예제가 추가되었습니다. 어떤 입력을 확장해야할지 구체적으로 지정할 수 있다면 ... – janbrohl

+0

예를 들어 주셔서 감사합니다! 이 코드 줄을 사용하여 정수 값 목록을 얻습니다. stapacketString = list (bytearray (base64.b64decode (base64Packet))). 이것이 올바른 방법입니까? 내 범위에 대해이 작동합니다. – Federico

관련 문제