Ich habe diese einfache Funktion geschrieben:
def padded_hex(i, l):
given_int = i
given_len = l
hex_result = hex(given_int)[2:] # remove '0x' from beginning of str
num_hex_chars = len(hex_result)
extra_zeros = '0' * (given_len - num_hex_chars) # may not get used..
return ('0x' + hex_result if num_hex_chars == given_len else
'?' * given_len if num_hex_chars > given_len else
'0x' + extra_zeros + hex_result if num_hex_chars < given_len else
None)
Beispiele:
padded_hex(42,4) # result '0x002a'
hex(15) # result '0xf'
padded_hex(15,1) # result '0xf'
Obwohl dies für mich klar genug ist und zu meinem Anwendungsfall passt (ein einfaches Testwerkzeug für einen einfachen Drucker), kann ich nicht anders, als zu glauben, dass es viel Raum für Verbesserungen gibt, und dies könnte auf etwas sehr Prägnantes reduziert werden.
Welche anderen Ansätze gibt es für dieses Problem?
value = 42; padding = 6; f"{value:#0{padding}x}"
löst einen Syntaxfehler aus: `Datei" <stdin> ", Zeile 1 f" {Wert: # 0 {padding} x} "^ SyntaxError: ungültig Syntax`import sys; print(sys.version)
Sie sicher, dass Sie den richtigen Interpreter verwenden.Wie wäre es damit:
print '0x%04x' % 42
quelle
*
, um Breite zu übergeben:'0x%0*x' % (4,42)
Verwenden Sie
*
diese Option , um die Breite und denX
Großbuchstaben zu übergebenprint '0x%0*X' % (4,42) # '0x002A'
Wie von Georg und Ashwini Chaudhary vorgeschlagen
quelle
Wenn nur für führende Nullen, können Sie die
zfill
Funktion ausprobieren .'0x' + hex(42)[2:].zfill(4) #'0x002a'
quelle
Was ich brauchte war
"{:02x}".format(7) # '07' "{:02x}".format(27) # '1b'
Wo
:
ist der Start der Formatierung Spezifikation für das erste Argument{}
zu.format()
, dann02
bedeutet „Pad , um die Eingabe von links mit0
s auf Länge2
“ undx
bedeutet „Format als hexadezimale mit Kleinbuchstabe“.Das Obige kann auch mit F-Strings gemacht werden:
f"{7:02x}" # '07' f"{27:02x}" # '1b'
quelle
Angenommen, Sie möchten führende Nullen für die Hexadezimalzahl haben, zum Beispiel möchten Sie eine 7-stellige Zahl, auf die Ihre Hexadezimalzahl geschrieben werden soll. Sie können dies folgendermaßen tun:
hexnum = 0xfff str_hex = hex(hexnum).rstrip("L").lstrip("0x") or "0" '0'* (7 - len(str_hexnum)) + str_hexnum
Dies ergibt als Ergebnis:
'0000fff'
quelle
'%0*x' % (7,0xfff)