2016-08-29 21 views
5

Tôi sẽ tạo tập lệnh python giải mã chuỗi Base64 thành một mảng byte (hoặc mảng giá trị Hex).Giải mã chuỗi Base64 thành mảng byte

Phía nhúng của dự án của tôi là bộ điều khiển vi mô tạo chuỗi base64 bắt đầu từ byte thô. Chuỗi chứa một số ký tự không thể in được (vì lý do này tôi chọn mã hóa base64).

Ở phía PC, tôi cần giải mã chuỗi base64 và khôi phục các byte nguyên gốc.

kịch bản của tôi sử dụng python 2.7 và thư viện base64:

base64Packet = raw_input('Base64 stream:') 

packet = base64.b64decode(base64Packet) 

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

Chuỗi kết quả là một chuỗi ký tự có chứa một số char không thể in được.

Có cách nào để giải mã chuỗi base64 thành giá trị byte (hoặc hex) không?

Cảm ơn trước!

+0

Bạn đã * có * ghi chú đó. Bạn mong đợi sản lượng gì và bạn thấy gì? Có lẽ bạn muốn sử dụng '% r' thay vì khi in? –

+0

@MartijnPieters: Sau khi giải mã, tôi sẽ có một danh sách python chứa từng byte đơn. – Federico

+1

Tại sao bạn cần điều đó? Bạn có cần thao tác các byte không? Đối tượng 'str' đã là một chuỗi, bạn có thể giải quyết từng byte bằng' packet [index] ', ví dụ, hoặc lặp qua chuỗi với' for byte trong gói: '. –

Trả lời

5

Bạn có thể sử dụng bytearray để biết chính xác điều này. Có thể mô-đun binasciistruct cũng có thể hữu ích.

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

Cảm ơn! Bạn có thể cung cấp một ví dụ cho việc sử dụng bytearray, binascii và struct để giải quyết vấn đề của tôi? Tôi không phải là một bậc thầy của python! – Federico

+0

thêm ví dụ - nếu bạn có thể cụ thể hơn về những gì đầu vào nên trở thành waht tôi có thể mở rộng ... – janbrohl

+0

Cảm ơn ví dụ của bạn! Tôi có được danh sách các giá trị số nguyên với dòng mã này: stapacketString = list (bytearray (base64.b64decode (base64Packet))). Đây có phải là cách chính xác không? Đối với phạm vi của tôi công trình này. – Federico

Các vấn đề liên quan