Am un cod Perl în care funcția hex() convertește datele hexagonale în zecimale. Cum pot face acest lucru pe Python?
3 răspunsuri
Dacă prin „date hexagonale” vă referiți la un șir de caractere de forma
s = "6a48f82d8e828ce82b82"
puteți folosi
i = int(s, 16)
pentru a-l converti în număr întreg și
str(i)
pentru a-l converti într-un șir zecimal.
- Pentru un număr hexazecimal negativ, acest lucru nu funcționează. – > .
- @EricWang Acest lucru funcționează perfect pentru numere negative: ideone.com/IHOQvp. Cu excepția cazului în care aveți un număr negativ codificat în format de complement de doi cu lățime fixă, dar aceasta ar fi o problemă diferită de cea care a fost întrebată aici. (Sfat: utilizați
struct
în acest caz). – > . - @SvenMarnach Da, mă refer la 2’complement folosit în format elf64. – > .
- hexazecimal -> zecimal -> binar -> zecimal:
int(bin(int(hex(42), 16)), 2)
– > . - Atenție, acesta este un big endian interpretare. Aceasta ar fi potrivită pentru unele lucruri (multe protocoale de rețea, de exemplu, sunt big endian), dar nu și pentru altele, cum ar fi să te uiți la intern datele interne ale programului din majoritatea sistemelor actuale, care sunt nativ little endian. – > .
- int(0xff) va face ceea ce trebuie. Necesită o bază explicită doar dacă este transmisă ca un șir de caractere. – > .
- @cassm și, de fapt, nu are niciun rost să
int()
în acest caz – este ca și cum ai scrieint(255)
– se poate scrie pur și simplu0xff
– > .
Ați putea folosi o evaluare literală:
>>> ast.literal_eval('0xdeadbeef')
3735928559
Sau doar specificați baza ca argument pentru int
:
>>> int('deadbeef', 16)
3735928559
Un truc care nu este bine cunoscut, dacă specificați baza 0
la int
, , atunci Python va încerca să determine baza din prefixul șirului de caractere:
>>> int("0xff", 0)
255
>>> int("0o644", 0)
420
>>> int("0b100", 0)
4
>>> int("100", 0)
100
hex
convertește un șir hexazecimal într-o valoare întreagă (care este stocată intern în binar, dar care, în esență, este pur și simplu o valoare numerică fără o bază). Apelul cătreprint
convertește acea valoare într-un șir zecimal și o imprimă. – > Por Borodin.