Pregunta

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

¿Cómo puedo hacer esto?

¿Fue útil?

Solución

Puede convertir una cadena en un entero 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. Tenga en cuenta, sin embargo, que si la cadena sí representa un entero, pero ese entero no cabe en un int con signo de 32 bits, que realmente va a obtener un objeto de tipo long lugar.

A continuación, puede convertirlo a otros anchos y signednesses con un poco de matemática simple:

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 en coma flotante con la función float:

f = float("3.14159")

flotadores Python son lo otros idiomas se refieren como double, es decir, que son de 64 bits. No hay flotadores de 32 bits en Python.

Otros consejos

Los siguientes tipos - en su mayor parte - no existen en Python en el primer lugar. En Python, las cadenas se convierten en intercepciones, anhela o flotadores, porque eso es todo lo que hay.

Usted está pidiendo conversiones que no son relevantes para Python en el primer lugar. Aquí está la lista de tipos que solicitó y sus equivalentes Python.

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

  • doble, flotador

  • flotador, flotador
  • string, esto es lo que tenía que empezar

No sé lo que son los siguientes, por lo que no sé un equivalente Python.

  • sin signo y con signo de 8 bits,
  • sin signo y con signo de 16 bits,
  • sin signo y con signo de 32 bits,
  • sin signo y con signo de 64 bits.

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

Python solo tiene una int tipo.Para convertir una cadena en una int, usar int() como esto:

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

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

No creo que esto necesariamente se puede responder bien sin más información. Como otros han dicho, sólo hay int y largo para los números enteros en Python - el lenguaje no se adhiere a los bits de ancho y de signo arquetipos de los lenguajes de programación de bajo nivel

.

Si usted está operando completamente dentro de pitón, entonces usted está probablemente haciendo la pregunta equivocada. Es probable que haya una mejor manera de hacer lo que necesita.

Si está interoperar con, por ejemplo, el código C, oa través de la red, entonces no son maneras de hacer esto, y parece que la respuesta a su cargo anterior cubría esa avenida muy cómodamente .

Yo sólo ahora tenía un problema en el que yo tenía un valor pasado a los 16 bits a dos con signo complementar número de Modbus. Necesitaba convertir esto en un número con signo. Terminé de escribir 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top