2016-08-29 69 views
5

Utworzyłbym skrypt w języku Pythona, który dekoduje ciąg Base64 do tablicy bajtów (lub tablicy wartości Hex).Dekodowanie łańcucha Base64 do tablicy bajtów

Osadzona strona mojego projektu to mikrokontroler, który tworzy ciąg base64, zaczynając od surowego bajtu. Ciąg zawiera niektóre znaki niedrukowalne (z tego powodu wybieram kodowanie base64).

Po stronie komputera muszę zdekodować ciąg base64 i odzyskać oryginalne bajty surowe.

Mój skrypt korzysta z Pythona 2.7 i bibliotekę base64:

base64Packet = raw_input('Base64 stream:') 

packet = base64.b64decode(base64Packet) 

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

Powstały ciąg jest ciągiem znaków, który zawiera pewną nienadrukowalne char.

Czy istnieje sposób dekodowania łańcucha base64 na wartości bajtowe (lub szesnastkowe)?

Z góry dziękuję!

+0

Już * masz * to bytestring. Jakich wyników oczekiwałeś i co widzisz? Być może podczas drukowania chcesz użyć '% r'? –

+0

@MartijnPieters: Po dekodowaniu powinienem mieć listę pytonów, które zawierają każdy pojedynczy bajt. – Federico

+1

Dlaczego tego potrzebujesz? Czy musisz manipulować bajtami? Obiekt 'str' jest już sekwencją, możesz adresować każdy bajt za pomocą' packet [index] ', na przykład, lub pętla przez ciąg z' for byte in packet: '. –

Odpowiedz

5

Możesz użyć dokładnie tego bytearray. Prawdopodobnie pomocny może być także moduł binascii i 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

Dzięki! Czy mógłbyś podać przykład użycia bytearray, binascii i struct do rozwiązania mojego problemu? Nie jestem mistrzem Pythona! – Federico

+0

dodane przykłady - jeśli możesz być bardziej szczegółowy na jakim wejściu powinno się stać, mogę rozszerzyć ... – janbrohl

+0

Dzięki za twój przykład! Otrzymuję listę wartości całkowitych z tą linią kodu: stapacketString = list (bytearray (base64.b64decode (base64Packet))). Czy to jest właściwy sposób? W moim zakresie to działa. – Federico