Converti stringa esadecimale in Int in Python

Rayven Esplanada 10 ottobre 2023
  1. Usa int() per convertire Hex in Int in Python
  2. Converti stringa esadecimale senza prefisso in Int in Python
  3. Converti la stringa esadecimale prefissata in Int in Python
  4. Converti le stringhe esadecimali Little e Big Endian in Int in Python
  5. Convertire l’esadecimale in un intero con segno in Python
Converti stringa esadecimale in Int in Python

Questo tutorial mostrerà come convertire la stringa esadecimale in int in Python. Coprirà diversi formati esadecimali come firmato, piccolo e big-endian, esadecimale annotato 0x e la stringa esadecimale predefinita.

Usa int() per convertire Hex in Int in Python

Il modo più comune ed efficace per convertire esadecimale in un intero in Python è usare la funzione di casting del tipo int().

Questa funzione accetta due argomenti: un argomento obbligatorio, che è il valore da convertire, e un secondo argomento opzionale, che è la base del formato numerico con il valore predefinito 10.

Altri formati numerici sono 2 per binario, 8 per ottale e 16 per esadecimale. Se metti 0 come argomento per il valore di base, deriverà il formato del numero dal prefisso del valore. Se non c’è alcun prefisso, lo riconoscerà automaticamente come decimale, 0b per binario, 0o per ottale e 0x per esadecimale.

Converti stringa esadecimale senza prefisso in Int in Python

Se la stringa esadecimale non ha il prefisso, specifica che il valore di base della funzione int() è 16.

Per esempio:

hex_val = "beef101"

print(int(hex_val, 16))

Produzione:

200208641

Il risultato è la conversione decimale o intera del valore esadecimale beef101.

Converti la stringa esadecimale prefissata in Int in Python

Se la stringa esadecimale ha un prefisso 0x, cambia l’argomento del valore di base in 0 per rilevare automaticamente il prefisso.

Puoi ancora passare 16 come base, ma se hai a che fare con più valori con formati numerici diversi, passare 0 è l’approccio migliore.

hex_val = "0xdeadcab"

print(int(hex_val, 0))
print(int(hex_val, 16))

Produzione:

233495723
233495723

Converti le stringhe esadecimali Little e Big Endian in Int in Python

Gli ordini di byte little endian e big-endia sono due tipi di sistemi di ordinamento per esadecimali. L’ordine predefinito è little-endian, che mette il numero più significativo nella parte più a destra della sequenza, mentre il big-endian fa il contrario.

Con questo in mente, tutto ciò che dobbiamo considerare è convertire il valore esadecimale big-endian in un little-endian. Successivamente, è ora possibile eseguire la normale conversione su di esso.

Per convertire una stringa esadecimale big-endian in una little-endian, usa bytearray.fromhex() e usa la funzione reverse() sul risultato. Successivamente, riconvertire il valore esadecimale in stringa e convertirlo in un numero intero.

big_endian = "efbe"


def to_little(val):
    little_hex = bytearray.fromhex(val)
    little_hex.reverse()
    print("Byte array format:", little_hex)

    str_little = "".join(format(x, "02x") for x in little_hex)

    return str_little


little_endian = to_little(big_endian)

print("Little endian hex:", little_endian)
print("Hex to int:", int(little_endian, 16))

Per riassumere questo blocco di codice:

  • Chiama bytearray.fromhex() per convertire la stringa esadecimale big-endian in un valore esadecimale di un array di byte.
  • Inverti l’array di byte per convertire il formato big-endian in un formato little-endian.
  • Converti nuovamente il valore dell’array di byte in un formato stringa esadecimale in little endian.
  • Converti la stringa in un numero intero usando int().

Produzione:

Byte array format: bytearray(b'\xbe\xef')
Little endian hex: beef
Hex to int: 48879

Convertire l’esadecimale in un intero con segno in Python

La conversione di qualsiasi formato numerico in un intero con segno richiederebbe un’operazione chiamata Complemento a due, che è un’operazione matematica bit per bit per calcolare i numeri con segno.

Quindi, prima di poter convertire l’esadecimale in un intero con segno, dovremmo definire una funzione che eseguirà l’operazione di Complemento a due.

def twosComplement_hex(hexval):
    bits = 16  # Number of bits in a hexadecimal number format
    val = int(hexval, bits)
    if val & (1 << (bits - 1)):
        val -= 1 << bits
    return val

Il bit più a sinistra in un valore binario è chiamato bit con segno, determinando se il numero intero è positivo o negativo. Questa funzione riserverà quel bit come bit con segno e sposterà gli altri bit per compensare utilizzando l’operatore di spostamento a sinistra bit per bit <<.

Ora, passiamo alla conversione effettiva del valore esadecimale in int con segno.

hex_val1 = "ff"
hex_val2 = "ffff"
hex_val3 = "aaff"


def twosComplement_hex(hexval):
    bits = 16
    val = int(hexval, bits)
    if val & (1 << (bits - 1)):
        val -= 1 << bits
    return val


print(twosComplement_hex(hex_val1))
print(twosComplement_hex(hex_val2))
print(twosComplement_hex(hex_val3))

Produzione:

255
-1
-21761

Ora, abbiamo ottenuto la conversione di una stringa esadecimale in un intero con segno.

In sintesi, abbiamo coperto la conversione di diversi tipi di formati esadecimali in interi con e senza segno. Usa int() con il valore e gli argomenti di base per convertire un esadecimale in un intero senza segno.

Se l’esadecimale è in un formato big-endian, convertilo prima in un formato little-endian usando bytearray.fromhex() e reverse().

Infine, se è necessario convertire una stringa esadecimale in un intero con segno, eseguire l’operazione Two’s Complement sul valore esadecimale per ottenere un valore intero con segno.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Articolo correlato - Python Hex

Articolo correlato - Python Integer