Quiero convertir un entero de 32 bytes (aunque podría necesitar otras longitudes) a un objeto bytes en python. ¿Hay una manera limpia y simple de hacer esto?Convierte n-byte int a bytes en python3
Respuesta
Te estoy adivinando necesitan un entero de 32 bits, y big endian de arranque:
>>> from ctypes import c_uint32
>>> l = c_uint32(0x12345678)
>>> bytes(l)
b'xV4\x12'
Hay c_uint8, c_uint16 y c_uint64 también. Para ints más largos necesitas hacerlo manualmente, usando divmod (x, 256).
>>> def bytify(v):
... v, r = divmod(v, 256)
... yield r
... if v == 0:
... raise StopIteration
... for r in bytify(v):
... yield r
...
>>> [x for x in bytify(0x12345678)]
[120, 86, 52, 18]
>>> bytes(bytify(0x12345678))
b'xV4\x12
>>> bytes(bytify(0x1234567890987654321))
b'!Ce\x87\t\x89gE#\x01!Ce\x87\t\x89gE#\x01'
No es necesario usar ctypes: 'bytes' se puede inicializar con una matriz de' int's en el rango (0, 256). – Tom
@Tom: Al parecer, no leyó toda la respuesta. –
Estimado @Lennart, comenzaste tu respuesta importando tipos. Continuó mostrando ctypes de varios tamaños. Luego proporcionaste una solución que no los usa (que personalmente creo que debería haber sido la primera solución), sin decirlo explícitamente. Solo pensé que era importante mencionar explícitamente el hecho, eso es todo. Tiene derecho a estar en desacuerdo, y no tiene que reformular su respuesta si no la ve, pero no es necesario lanzar acusaciones. Dije lo que dije porque creo que algunas personas pueden tener la impresión equivocada de que se necesitan ctypes y se desaniman con eso. – Tom
to_bytes (longitud, byteorder [firmado]) es todo lo que necesita a partir de 3,2. En este caso, algún identificador .to_bytes (4, 'grande') debería darle la cadena de bytes que necesita.
>>> hash.to_bytes (32) ... Rastreo (llamada más reciente pasado): ... Archivo "
La próxima vez usaré un identificador diferente; 'hash' estaba destinado a ser el nombre de variable real o literal, no el incorporado. Olvidé que había una construcción así, mi mal. byteorder también se requiere ahora. – SilverbackNet
Oh, estaba confundido, ahora está todo claro, ¡gracias! – Tom
Puede usar bytes("iterable")
directamente. Donde cada valor en iterable
será específico byte
en bytes()
. Ejemplo de codificación poco endian:
>>> var=0x12345678
>>> var_tuple=((var)&0xff, (var>>8)&0xff, (var>>16)&0xff, (var>>24)&0xff)
>>> bytes(var_tuple)
b'xV4\x12'
Suponga que tiene
var = 'і' # var is ukrainian і
queremos obtener binaria de ella. Flujo es esto. valor/que es de cadena => bytes => int => binario
binary_var = '{:b}'.format(int.from_bytes(var.encode('utf-8'), byteorder='big'))
Ahora binary_var es '1101000110010110'. Tipo es una cadena.
Ahora vuelve, desea obtener el valor Unicode de binario:
int_var = int(binary_var, 2) # here we get int value, int_var = 53654
Ahora necesitamos convertir número entero de bytes. 'І' de Ucrania no va a encajar en 1 byte pero en 2. convertir a bytes reales bytes_var = B '\ xd1 \ x96'
bytes_var = int_var.to_bytes(2, byteorder='big')
Finalmente Decodificamos nuestros bytes.
ukr_i = bytes_var.decode('utf-8') # urk_i = 'і'
- 1. Convierte Char a Int
- 2. Convierte BitSet a int
- 3. Convierte wchar_t en int
- 4. Convierte 2 bytes a un número
- 5. Convierte IEnumerable <int> en int []
- 6. Int matriz de bytes a
- 7. Convertir 4 bytes a int
- 8. ¿Por qué el Diseñador de Windows Forms convierte int en bytes y luego vuelve a int para FromArgb?
- 9. NÚMERO: Mysql que convierte Enum a Int
- 10. conversión de bytes a int en Java
- 11. ¿Cómo convertir una matriz de bytes a una matriz int?
- 12. ¿Cómo convierte Java int en un byte?
- 13. python3 unicode-escape no funciona con bytes no-ascii?
- 14. StringIO en Python3
- 15. C - Convierte long int a cadena hexadecimal firmado
- 16. ¿Convertir int a una matriz de bytes en C?
- 17. ¿Cómo convierto un int a dos bytes en C#?
- 18. matriz de bytes a unsigned int en Java
- 19. ¿Cómo se convierte una cadena de C++ a un int?
- 20. Error que convierte el tipo de datos nvarchar a int
- 21. C# int conversión de bytes
- 22. Convierte long to two int y viceversa
- 23. bloque C se convierte en la expresión: ({int a = 1; int b = 2; a + b;}) es igual a 3
- 24. ¿Unario menos en un corto se convierte en int?
- 25. ¿Cómo convertir una matriz de bytes int a little endian?
- 26. Java - ¿Convertir int a Byte Array de 4 bytes?
- 27. Convertir 16 bits con la firma int a 2 bytes?
- 28. Error al convertir una matriz de bytes a una matriz int en C#
- 29. convertir una cadena de bytes en un int (python)
- 30. convertir int a flote a hexadecimal
¿Qué formato tiene el número entero actualmente? –
entero de 32 bytes Eso es un montón de nu ... bytes. ¿Qué es exactamente lo que intentas lograr y qué pruebaste ya? –
Tengo sha hashes en formato 0x ..., python está muy feliz convirtiéndolos en enteros, pero ¿cómo puedo obtener bytes? – Peter