2014-04-13 9 views
6

Tôi tin rằng tôi hiểu nhầm điều gì đó có lẽ nên đơn giản.Làm thế nào để chỉ cần in python " xaa xbb xcc xdd" thành 0xddccbbaa?

Tôi đang cố chấp nhận các đối số được chuyển đến tập lệnh python. Loại đối số mà tôi mong đợi ở đâu đó dọc theo các dòng "\xaa\xbb\xcc\xdd" và nó tiếp tục chuyển đổi nó thành nhị phân (tôi nghĩ?) Thay vì thực sự cho phép tôi in nó ra như thế nào nó đã được thông qua.

Làm cách nào để có được điều này để thực hiện những gì tôi đang tìm kiếm? Cuối cùng tôi muốn thực hiện điều này và có thể chuyển đổi nó thành một cái gì đó như 0xddccbbaa, nhưng tôi đoán ít nhất tôi muốn hoàn thành bước đầu tiên bằng cách có thể giải thích nó.

Giống như, tôi không muốn in \x75 để in ra một u. Tôi muốn có thể giải thích \x75\x75. Bất kỳ cách dễ dàng để làm điều này?

Trả lời

8

Một số cuộc biểu tình với struct:

x = b"\xaa\xbb\xcc\xdd" 

import struct 

struct.unpack('I',x) 
Out[3]: (3721182122,) 

y = struct.unpack('I',x) 

y[0] 
Out[5]: 3721182122 

hex(y[0]) 
Out[6]: '0xddccbbaa' 

Về cơ bản: điều trị các bytestring như một số nguyên unsigned 4-byte ít endian ('I'). struct xử lý biến nó thành một int và bạn có thể sử dụng hex để có được một chuỗi đại diện của nó trong hex (hoặc sử dụng một cái gì đó như '{:x}'.format(y[0]), nếu bạn thích)

+0

CẢM ƠN! Điều này giải quyết những gì tôi đang tìm kiếm. Không thể tin rằng tôi không thể hình dung ra điều này. Rất cám ơn người đàn ông! – user3528254

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