Convertir une chaîne hexadécimale en Int en Python

Rayven Esplanada 10 octobre 2023
  1. Utilisez int() pour convertir l’hexadécimal en int en Python
  2. Convertir une chaîne hexadécimale non préfixée en Int en Python
  3. Convertir une chaîne hexadécimale préfixée en Int en Python
  4. Conversion des chaînes hexadécimales Little et Big Endian en Int en Python
  5. Convertir l’hexadécimal en entier signé en Python
Convertir une chaîne hexadécimale en Int en Python

Ce tutoriel montre comment convertir la chaîne de caractères hexadécimale en int en Python. Il couvre différents formats hexadécimaux, comme les formats signés, little et big-endian, l’hexadécimal annoté 0x et la chaîne hexadécimale par défaut.

Utilisez int() pour convertir l’hexadécimal en int en Python

La façon la plus courante et la plus efficace de convertir un hexagone en un entier en Python est d’utiliser la fonction de type int().

Cette fonction accepte deux arguments : un argument obligatoire, qui est la valeur à convertir, et un second argument optionnel, qui est la base du format des nombres avec la valeur par défaut 10.

Les autres formats de nombres sont 2 pour le binaire, 8 pour l’octal, et 16 pour l’hexadécimal. Si vous mettez 0 comme argument pour la valeur de base, il dérivera le format des nombres du préfixe de la valeur. S’il n’y a pas de préfixe, il le reconnaîtra automatiquement comme un décimal, 0b pour le binaire, 0o pour l’octal, et 0x pour l’hexadécimal.

Convertir une chaîne hexadécimale non préfixée en Int en Python

Si la chaîne hexadécimale n’est pas préfixée, alors la valeur de base de la fonction int() doit être 16.

Par exemple:

hex_val = "beef101"

print(int(hex_val, 16))

Production :

200208641

Le résultat est la conversion décimale ou entière de la valeur hexadécimale beef101.

Convertir une chaîne hexadécimale préfixée en Int en Python

Si la chaîne hexadécimale a un préfixe 0x, alors changez l’argument de la valeur de base en 0 pour détecter le préfixe automatiquement.

Vous pouvez toujours passer 16 comme base, mais si vous avez affaire à plusieurs valeurs avec différents formats de nombres, passer 0 est la meilleure approche.

hex_val = "0xdeadcab"

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

Production :

233495723
233495723

Conversion des chaînes hexadécimales Little et Big Endian en Int en Python

(https://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/) sont deux types de systèmes de commande en hexadécimal. L’ordre par défaut est le little-endian, qui place le nombre le plus significatif dans la partie la plus à droite de la séquence, alors que le big-endian fait le contraire.

Dans cette optique, il suffit de convertir la valeur hexadécimale du big-endian en un little-endian. Ensuite, la conversion habituelle peut être effectuée sur ce dernier.

Pour convertir une chaîne hexadécimale de big-endian en little-endian, utilisez bytearray.fromhex() et utilisez la fonction reverse() sur le résultat. Ensuite, reconvertissez la valeur hexadécimale en chaîne de caractères et convertissez-la en un entier.

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))

Pour résumer ce bloc de code :

  • Appelez bytearray.fromhex() pour convertir la chaîne hexadécimale du big-endian en une valeur hexadécimale de tableau d’octets.
  • Inversez le tableau d’octets pour convertir le big-endian en un format little-endian.
  • Reconvertir la valeur du tableau d’octets en une chaîne de caractères au format hexadécimal en little-endian.
  • Convertissez la chaîne en un entier en utilisant int().

Production :

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

Convertir l’hexadécimal en entier signé en Python

La conversion de n’importe quel format de nombre en un nombre entier signé nécessiterait une opération appelée Complément à deux, qui est une opération mathématique par bit pour calculer les nombres signés.

Ainsi, avant de pouvoir convertir un hexadécimal en un entier signé, nous devons définir une fonction qui effectuera l’opération de complément à deux.

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

Le bit le plus à gauche dans une valeur binaire est appelé le bit signé, déterminant si l’entier est positif ou négatif. Cette fonction va réserver ce bit comme le bit signé et décaler les autres bits pour compenser en utilisant l’opérateur de décalage vers la gauche <<.

Maintenant, passons à la conversion réelle de la valeur hexadécimale en int. signé.

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))

Production :

255
-1
-21761

Maintenant, nous avons réussi à convertir une chaîne hexadécimale en un entier signé.

En résumé, nous avons couvert la conversion de différents types de formats hexadécimaux en entiers signés et non signés. Utilisez int() avec la valeur et les arguments de base pour convertir un hexadécimal en un entier non signé.

Si l’hexadécimal est dans un format big-endian, convertissez-le d’abord en format little-endian en utilisant bytearray.fromhex() et reverse().

Enfin, si vous avez besoin de convertir une chaîne hexadécimale en un entier signé, alors effectuez l’opération Complément à deux sur la valeur hexadécimale de celle-ci pour obtenir une valeur entière signée.

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

Article connexe - Python Hex

Article connexe - Python Integer