Typecasting en Python

Necesito convertir cadenas en Python a otros tipos como ints, dobles, flotadores y cadenas sin signo y con signo de 8, 16, 32 y 64 bits.

¿Cómo puedo hacer esto?

Puede convertir una cadena en un entero con signo de 32 bits con la función int :

 str = "1234" i = int(str) // i is a 32-bit integer 

Si la cadena no representa un número entero, obtendrá una excepción ValueError . Sin embargo, tenga en cuenta que si la cadena representa un entero, pero ese entero no encaja en un int con signo de 32 bits, entonces en realidad obtendrá un objeto de tipo long .

Luego puedes convertirlo a otros anchos y firmas con algunos cálculos simples:

 s8 = (i + 2**7) % 2**8 - 2**7 // convert to signed 8-bit u8 = i % 2**8 // convert to unsigned 8-bit s16 = (i + 2**15) % 2**16 - 2**15 // convert to signed 16-bit u16 = i % 2**16 // convert to unsigned 16-bit s32 = (i + 2**31) % 2**32 - 2**31 // convert to signed 32-bit u32 = i % 2**32 // convert to unsigned 32-bit s64 = (i + 2**63) % 2**64 - 2**63 // convert to signed 64-bit u64 = i % 2**64 // convert to unsigned 64-bit 

Puede convertir cadenas a punto flotante con la función de float :

 f = float("3.14159") 

Los flotadores de Python son lo que otros lenguajes denominan double , es decir, son de 64 bits. No hay flotadores de 32 bits en Python.

Los siguientes tipos, en su mayor parte, no existen en Python en primer lugar. En Python, las cadenas se convierten a ints, longs o floats, porque eso es todo lo que hay.

Estás pidiendo conversiones que no son relevantes para Python en primer lugar. Aquí está la lista de tipos que pidió y su equivalente en Python.

  • sin firmar y firmado int 8 bits, int
  • sin firmar y firmado int 16 bits, int
  • sin signo y firmado int 32 bits, sin signo: largo , firmado int
  • sin firmar y firmado int 64 bits, largo

  • doble, flotar

  • flotar flotar
  • cadena, esto es lo que tenias que empezar

No sé qué son las siguientes, así que no sé un equivalente de Python.

  • sin firmar y firmado de 8 bits,
  • sin firmar y firmado de 16 bits,
  • 32 bit sin firmar y firmado,
  • 64 bit sin firmar y firmado.

Ya tienes todas las conversiones que importan: int() , long() y float() .

Python solo tiene un tipo int único. Para convertir una cadena en un int , use int() así:

 >>> str = '123' >>> num = int(str) >>> num 123 

Editar: También para convertir a flotar, use float() exactamente de la misma manera.

No creo que esto pueda ser respondido necesariamente sin más información. Como han dicho otros, solo hay enteros int y long para los enteros en python: el lenguaje no se adhiere a los arquetipos de ancho de bits y de signatura de los lenguajes de progtwigción de nivel inferior.

Si está operando completamente dentro de Python, entonces probablemente esté haciendo la pregunta incorrecta. Probablemente hay una mejor manera de hacer lo que necesitas.

Si está interactuando con, por ejemplo, el código C, o a través de la red, entonces hay formas de hacerlo, y parece que la respuesta a su publicación anterior cubrió esa avenida bastante fácilmente.

Acabo de tener un problema por el que pasé un valor como un número de complemento de dos bits con signo de 16 bits de modbus. Necesitaba convertir esto en un número firmado. Terminé escribiendo esto, que parece funcionar bien.

 # convert a 32 bit (prob) integer as though it was # a 16 bit 2's complement signed one def conv_s16(i): if (i & 0x8000): s16 = -(((~i) & 0xFFFF) + 1) else: s16 = i return s16