2014-04-13 9 views
6

Uważam, że nie rozumiem czegoś, co prawdopodobnie powinno być proste.Jak po prostu mieć python wydrukować " xaa xbb xcc xdd" jako 0xddccbbaa?

Próbuję zaakceptować argumenty przekazane do skryptu Pythona. Argument, jakiego oczekuję, jest gdzieś na linii "\xaa\xbb\xcc\xdd", i konwertuje go na binarny (tak myślę?) Zamiast pozwolić mi go wydrukować, jak został przekazany.

Jak mogę zrobić to, czego szukam? Ostatecznie chciałbym to zrobić i być w stanie przekonwertować go na coś takiego jak 0xddccbbaa, ale myślę, że przynajmniej chciałbym zrobić pierwszy krok, aby go zinterpretować.

Podobnie, nie chcę drukować \x75, aby wydrukować u. Chcę móc interpretować \x75 jako \x75. Każdy łatwy sposób to zrobić?

Odpowiedz

8

Niektóre prezentacje z 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' 

Zasadniczo: traktują bytestring jako ostrokońcej 4-bajtową liczbę całkowitą bez znaku ('I'). struct uchwyty zamieniając go w int i można użyć hex, aby uzyskać ciąg znaków reprezentujących go w hex (lub użyć czegoś takiego jak '{:x}'.format(y[0]), jeśli wolisz)

+0

DZIĘKUJEMY! To rozwiązało to, czego szukałem. Nie mogę uwierzyć, że nie mogłem tego rozgryźć. Wielkie dzięki! – user3528254