Actualmente estoy trabajando en un programa de cifrado / descifrado y necesito poder convertir bytes en un número entero. Yo sé eso:
bytes([3]) = b'\x03'
Sin embargo, no puedo averiguar cómo hacer lo inverso. ¿Qué estoy haciendo terriblemente mal?
python
python-3.x
int
type-conversion
byte
Vladimir Shevyakov
fuente
fuente
struct
módulo si desea convertir múltiples variables a la vez.Respuestas:
Suponiendo que tiene al menos 3.2, hay una función incorporada para esto :
## Examples: int.from_bytes(b'\x00\x01', "big") # 1 int.from_bytes(b'\x00\x01', "little") # 256 int.from_bytes(b'\x00\x10', byteorder='little') # 4096 int.from_bytes(b'\xfc\x00', byteorder='big', signed=True) #-1024
fuente
int.from_bytes
yord(b'\x03')
para bytes / caracteres individuales?int.from_bytes
puede interpretar el byte como un entero con signo si se lo indica:int.from_bytes(b'\xe4', "big", signed=True)
devuelve -28, mientras queord()
oint.from_bytes
en modo sin firmar devuelve 228.Las listas de bytes son subscriptables (al menos en Python 3.6). De esta forma puede recuperar el valor decimal de cada byte individualmente.
>>> intlist = [64, 4, 26, 163, 255] >>> bytelist = bytes(intlist) # b'@x04\x1a\xa3\xff' >>> for b in bytelist: ... print(b) # 64 4 26 163 255 >>> [b for b in bytelist] # [64, 4, 26, 163, 255] >>> bytelist[2] # 26
fuente
int.from_bytes( bytes, byteorder, *, signed=False )
no funciona conmigo Utilicé la función de este sitio web, funciona bien
https://coderwall.com/p/x6xtxq/convert-bytes-to-int-or-int-to-bytes-in-python
def bytes_to_int(bytes): result = 0 for b in bytes: result = result * 256 + int(b) return result def int_to_bytes(value, length): result = [] for i in range(0, length): result.append(value >> (i * 8) & 0xff) result.reverse() return result
fuente