Vreau să iau un număr întreg (care va fi <= 255), la un hex reprezentare string
de exemplu: vreau să trec în 65
și ieși '\x41'
, sau 255
și să '\xff'
.
Am'am încercat să fac acest lucru cu struct.pack('c',
65)
, dar asta se înece cu nimic mai presus de 9
, deoarece acesta vrea să-l ia într-un singur șir de caractere.
Sunteți în căutarea pentru " rhc " funcția.
Pari a fi de amestecare zecimal reprezentări de numere întregi și hex reprezentări de numere întregi, astfel încât acesta's nu este foarte clar de ce ai nevoie. Bazat pe descrierea ta, cred că unul dintre aceste fragmente arata ceea ce vrei.
>>> chr(0x65) == '\x65'
True
>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True
Rețineți că acest lucru este destul de diferit de un șir care conține un număr întreg ca hex. Dacă asta este ceea ce vrei, de a folosi hex
interna.
Permiteți-mi să adaug asta, pentru că, uneori, vrei doar o singură cifră reprezentare:
'{:x}'.format(15)
> f
Și acum, cu noua f''
format siruri de caractere se poate face:
f'{15:x}'
> f
NOTĂ: inițial 'f' din f'{15:x}'` este pentru a semnifica un șir format
Dacă doriți să ambalaj un struct, cu o valoare <255 (un octet fără semn, uint8_t) și se încheie cu un șir de caractere, ai're, probabil, în căutarea pentru format B în loc de a c. C convertește un caracter la un șir de caractere (nu prea utile de la sine), în timp ce B convertește un număr întreg.
struct.pack('B', 65)
(Și da, de 65 de ani este \x41, nu \x65.)
Struct clasa a va, de asemenea, convenabil mâner endianness pentru comunicare sau pentru alte utilizări.
Rețineți că pentru valori mari, hex()
încă mai funcționează (alte răspunsuri don't):
x = hex(349593196107334030177678842158399357)
print(x)
Python 2: 0x4354467b746f6f5f736d616c6c3f7dl
Python 3: 0x4354467b746f6f5f736d616c6c3f7d
Pentru o decriptat RSA mesaj, s-ar putea face următoarele:
import binascii
hexadecimals = hex(349593196107334030177678842158399357)
print(binascii.unhexlify(hexadecimals[2:-1])) # python 2
print(binascii.unhexlify(hexadecimals[2:])) # python 3
Aceasta a lucrat cel mai bine pentru mine
"0x%02X" % 5 # => 0x05
"0x%02X" % 17 # => 0x11
Schimba (2) daca vrei un numar cu o lățime mai mare (2-2 hex printned caractere) deci 3 va oferi următoarele
"0x%03X" % 5 # => 0x005
"0x%03X" % 17 # => 0x011
Am vrut un număr întreg aleator transformat într-o șase cifre hex șir cu un # la început. Pentru a obține acest lucru am folosit
"#%6x" % random.randint(0xFFFFFF)
Cu format()`, ca pe format-exemple, putem face:
>>> # format also supports binary numbers
>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
'int: 42; hex: 2a; oct: 52; bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'