2013-04-08 20 views
12

werfen Sie einen Blick auf diese:Python, Druck Hex entfernt erste 0?

fc = '0x' 
for i in b[0x15c:0x15f]: 
    fc += hex(ord(i))[2:] 

Können sagen, dieser Code die hex 00 04 0f, statt es auf diese Weise das Schreiben gefunden, es die erste 0 entfernt, und schreibt: 04f jede mögliche Hilfe?

Antwort

21

Dies geschieht, weil hex() werden keine führenden Nullen enthalten, zum Beispiel:

>>> hex(15)[2:] 
'f' 

Um sicherzustellen, dass Sie immer bekommen zwei Zeichen, können Sie str.zfill() hinzufügen verwenden führende Null bei Bedarf:

>>> hex(15)[2:].zfill(2) 
'0f' 

Hier wha ist t es in Ihrem Code aussehen:

fc = '0x' 
for i in b[0x15c:0x15f]: 
    fc += hex(ord(i))[2:].zfill(2) 
+0

'für i in b [0x15c: 0x15f]: \t \t h = hex (ord (i)) [2:] \t \t wenn len (h) = 2: h = '0' + h \t \t fc + = h; ' Ein Freund sagte, das wird funktionieren – thethiny

+0

Endlich, ein richtig erklärt, funktionierte Beispiel auf thi s! – monojohnny

+0

Ich würde nicht sagen, es ist richtig erklärt und ich bin nicht der beste zu erklären. Es ignoriert die führenden Nullen, weil sie nichts mit dem Dezimalwert der Hexadezimalwerte zu tun haben. Sie geben die Anzahl der Bytes an, die die Werte belegen. 15 = f. 0f = 15 weil 0 + 15 ist 15 –

2
print ["0x%02x"%ord(i) for i in b[0x15c:0x15f]] 

Verwendung ein Format-String "%2x" es zu formatieren sagt breite 2-Zeichen sein, sagt ebenfalls "%02x" es mit 0'en

Notiz-Pad, dass dies immer noch der führenden 0en von den Dingen mit mehr als 2 entfernen würde Hexadezimalwerte zB "0x%02x"%0x0055 => "0x55"

0

Es ist immer noch nur eine grafische Darstellung für Ihre Bequemlichkeit.
Der Wert wird nicht wirklich aus den Daten entfernt, es ist nur visuell verkürzt.

Ausführliche Beschreibung hier und warum es ist oder warum es nicht wichtig: Why are hexadecimal numbers prefixed with 0x?

+1

nein, wird gestrippt aus den Daten, habe ich versucht, die Ausgabe gedruckt wird, und es unterschiedliche Werte gibt, 04f viel zu viel anders ist als 00040f – thethiny

11
>>> map("{:02x}".format, (10, 13, 15)) 
['0a', '0d', '0f'] 
+3

Das ist waaaaay mehr Python als die am meisten uploaded Antwort! +1! – Antonvh