2016-08-29 43 views
5

Base64 dizesini bir bayt dizisine (veya Hex değerleri dizisine) çözen bir python komut dosyası oluştururdum.Decode Base64 dizgisi bayt dizisine

Projemin gömülü tarafı, ham bayttan başlayarak bir base64 dizesi oluşturan bir mikro denetleyicidir. Dize, yazdırılamayan bazı karakterler içeriyor (bu nedenle base64 kodlamasını seçiyorum).

Pc tarafında base64 dizesinin kodunu çözmem ve orijinal raw baytları kurtarmam gerekiyor.

base64Packet = raw_input('Base64 stream:') 

packet = base64.b64decode(base64Packet) 

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

Sonuç dizesi bazıları değil yazdırılabilir karbonlaşmış madde içeren bir karakter dizesidir:

Benim komut piton 2.7 ve base64 kitaplığını kullanır.

Base64 dizesini bayt (veya hex) değerlerine çözmenin bir yolu var mı?

Şimdiden teşekkürler!

+0

Zaten * bu kadar zorlama. Ne çıktı bekliyordun ve ne görüyorsun? Baskı yaparken yerine% r'yi kullanmak isteyebilirsiniz? –

+0

@MartijnPieters: Kod çözüldükten sonra, her bir tekli baytı içeren bir python listesi olurdu. – Federico

+1

Neden buna ihtiyacınız var? Baytları işlemek mi gerekiyor? Bir 'str 'nesnesi zaten bir dizidir, örneğin her bir baytı' 'packet [index]' ile adresleyebilir ya da '' byte paketinde '' ile dize üzerinde döngü yapabilir. –

cevap

5

Tam olarak bunun için bytearray kullanabilirsiniz. Muhtemelen binascii modülü ve struct da yardımcı olabilir.

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

Teşekkürler! Sorunumu çözmek için bytearray, binascii ve struct kullanımına örnek verebilir misiniz? Ben bir piton ustası değilim! – Federico

+0

örnekler eklendi - hangi girdiye waht olacağına daha spesifik olabilirsen ... – janbrohl

+0

Örneğiniz için teşekkürler! Bu kod satırıyla tamsayı değerleri listesini elde ediyorum: stapacketString = list (bytearray (base64.b64decode (base64Packet))). Bu doğru yol mu? Benim kapsamım için bu çalışır. – Federico

İlgili konular