Estoy leyendo en una matriz/lista de bytes desde el socket. Quiero que Python trate el primer byte como un "entero de 8 bits sin signo". ¿Cómo es posible obtener su valor entero como un entero sin signo de 8 bits?Convertir byte de Python en "entero de 8 bits sin signo"
Respuesta
Utilice el módulo struct.
import struct
value = struct.unpack('B', data[0])[0]
Tenga en cuenta que desempaquetar siempre devuelve una tupla, incluso si sólo está desempaquetar un artículo.
Además, eche un vistazo a this SO question.
¿puedes mostrar cómo? – bbb
entonces, ¿qué se almacena en struct.unpack ('B', data [0]) [1]? – bbb
datos [0] es el primer byte que recibe. unpack ("B", data [0]) trata ese byte como un entero sin signo de 8 bits (conocido como char sin signo en C) y devuelve una tupla que contiene ese entero (si hubieras pasado dos bytes para descomprimir, harías algo así como desempaquetar ("BB", datos [0: 2]) y obtener una 2-tupla de vuelta). El final [0] obtiene el primer (y único) elemento en la tupla. – codeape
bytes/bytearray es una secuencia de enteros. Si usted acaba de acceder a un elemento por su índice tendrá un entero:
>>> b'abc'
b'abc'
>>> _[0]
97
Por su propia definición, bytes y bytearrays contener números enteros en el range(0, 256)
. Entonces son "enteros de 8 bits sin signo".
por ejemplo, tengo esto en mi código del lado del servidor datos = conn.recv (1000000) siempre que i entiendo i recibir bytes ... así que quiero que los datos [0] se traten como "entero de 8 bits sin signo". ¿Cómo es esto posible? – bbb
Esto solo funciona en Python 3.x. Python 2.6 tiene la sintaxis literal de b'string ', pero es simplemente un alias de str, y las versiones anteriores le darán un SyntaxError. – musicinmybrain
@musicinmybrain: es por eso que esta pregunta está etiquetada como 'python-3.x' supongo que – SilentGhost
Otra opción muy razonable y sencilla, si sólo tiene valor entero del primer byte, sería algo como lo siguiente:
value = ord(data[0])
Si se desea expandir todos los elementos de los datos enviados a la vez (y no son solo una matriz homogénea), o si está tratando con objetos multibyte como enteros de 32 bits, entonces necesitará usar algo como el módulo struct.
- 1. entero de 1 byte sin signo C++
- 2. Si el byte es un número entero de 8 bits, ¿cómo podemos establecerlo en 255?
- 3. Encontrar posiciones de bits en un entero de 32 bits sin signo
- 4. Conversión de caracteres sin signo a entero con signo
- 5. encasillamiento Implícito en C (conversión de 32 bits sin signo de 8 bits a T int)
- 6. ¿Cómo convertir un byte en bits?
- 7. conversión de entero de 32 bits sin signo (big endian) a largo y volver
- 8. Entero a byte con un número dado de bits establecidos
- 9. C/C++ - Convertir entero de 24 bits con signo para flotar
- 10. Entero con signo Little-Endian
- 11. Decodificar decimal codificado en binario (BCD) a entero sin signo
- 12. Convertir 3 bytes en un entero con signo en C#
- 13. ¿Cómo puedo invertir bits de un byte sin signo en Java?
- 14. MySQL entero sin signo problemas aritméticos?
- 15. Convertir entero a una representación de bits
- 16. ¿Qué sucede cuando resta un entero sin signo de un entero con signo en C++?
- 17. ¿La mejor manera de convertir un entero con signo en un largo sin firmar?
- 18. cómo convertir una cadena hexadecimal a un entero sin signo de 64 bits (uint64_t) de una manera rápida y segura?
- 19. Buscando un 128 bits entero sin signo de tipo de datos de .NET Framework
- 20. ¿Cómo simulo una rotación a nivel de bits de un entero de 64 bits (sin signo) en JavaScript?
- 21. máximo número entero corto con signo en Python
- 22. segura conversión de doble a entero sin signo de 64 bits
- 23. Java: La implementación de un número entero de 128 bits sin signo
- 24. ¿Cómo obtener un solo byte de BitArray (sin byte [])?
- 25. Cómo convertir un entero de 32 bits de unsigned a firmado en MySQL o PHP?
- 26. Modificar bits en un entero en Python
- 27. Convertir sbyte en byte
- 28. C Trae enésimo byte de número entero
- 29. Convertir profundidad de 8 bits CvMat * a 8 bits de profundidad
- 30. Inversión de bits del número entero de Python
Si está dispuesto a tomar una dependencia de 'numpy', algunas de sus funciones toman un' dtype' arg, que puede establecer en 'numpy.uint8'. Ejemplo: 'bytestream = numpy.fromfile (infile, dtype = numpy.uint8)' – CrazyPyro