[Python] 2 conversion du complément

Aperçu

Conversion mutuelle de la «valeur numérique» et de la «chaîne de caractères hexadécimaux» en Python. Les valeurs négatives sont le complément de 2.

Code lambda

##2 complément de conversion lambda
bits = 8

all_one = (1<<bits) - 1
int2ss = lambda i: hex(i & all_one)
## int2ss = lambda i: hex(i & ((1<<bits) - 1))

sign_mask = (1<<(bits-1))
ss2int = lambda s: -(int(s,16) & sign_mask) | int(s,16)
## ss2int = lambda s: -(int(s,16) & (1<<(bits-1))) | int(s,16)

Version de la fonction de code

##2 version de la fonction de conversion complémentaire
def int_to_signed_string(i, bits):
    return hex(i & ((1<<bits) - 1))

def signed_string_to_int(s, bits):
    ss = int(s,16)
    return -(ss & (1<<(bits-1))) | ss

##pour le test
bits = 8
int2ss = lambda i: int_to_signed_string(i, bits)
ss2int = lambda s: signed_string_to_int(s, bits)

Test

test = [-128, -127, -2, -1, 0, 1, 2, 126, 127]
test_str_hex = []

for t in test:
    print(f"{t}: {hex(t)}, {int2ss(t)}")
    test_str_hex.append(int2ss(t))

print("---")

for t in test_str_hex:
    print(f"{t}: {int(t, 16)}, {ss2int(t)}")

Résultat de l'exécution. La gauche est avant la conversion, le milieu est lorsque le complément de 2 n'est pas pris en compte, et la droite est quand il est considéré.

-128: -0x80, 0x80
-127: -0x7f, 0x81
-2: -0x2, 0xfe
-1: -0x1, 0xff
0: 0x0, 0x0
1: 0x1, 0x1
2: 0x2, 0x2
126: 0x7e, 0x7e
127: 0x7f, 0x7f
---
0x80: 128, -128
0x81: 129, -127
0xfe: 254, -2
0xff: 255, -1
0x0: 0, 0
0x1: 1, 1
0x2: 2, 2
0x7e: 126, 126
0x7f: 127, 127

référence

Convertir 2 complément en décimal en Python --Qiita

Recommended Posts

[Python] 2 conversion du complément
conversion de date / heure <-> python unix-time
[S3] CRUD avec S3 utilisant Python [Python]
Opération S3 avec python boto3
Conversion de type de données d'image [Python]
Compléter python avec emacs en utilisant company-jedi
Python
Mémo de conversion de l'application autonome Python QT App
Conversion MP3 → WAV avec Python
comparaison du module de conversion de fichier exécutable python 2
Conversion de la chaîne <-> date (date, datetime) en Python
Python UTC ⇔ JST, chaîne de caractères (UTC) ⇒ Mémo de conversion JST
Comparaison des modules de conversion japonais en Python3
PUT gzip directement dans S3 en Python
Python> Spécification du format lors de l'impression de `%`> "% s% s"% ('Hello', 'World',)
Connectez-vous à s3 avec AWS Lambda Python
Python: prétraitement dans l'apprentissage automatique: conversion de données
Accéder aux ressources S3 via Cognito en Python
Chiffrement côté serveur S3 SSE avec Python boto3
Conversion de chaîne → valeur booléenne en Python Considération