Domanda

Ho bisogno di convertire le stringhe in Python per altri tipi come unsigned e firmato 8, 16, 32, e 64 bit interi, doppie, galleggianti, e archi.

Come posso fare questo?

È stato utile?

Soluzione

È possibile convertire una stringa in un intero con segno a 32 bit con la funzione int:

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

Se la stringa non rappresenta un numero intero, si otterrà un'eccezione ValueError. Si noti, tuttavia, che se la stringa non rappresenta un numero intero, ma che integer non rientra in un int segno a 32 bit, quindi ci troveremo a ottenere un oggetto di tipo long invece.

È quindi possibile convertirlo in altre larghezze e signednesses con qualche semplice matematica:

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

È possibile convertire le stringhe in virgola mobile con la funzione float:

f = float("3.14159")

galleggianti Python sono quali altre lingue si riferiscono come double, cioè esse sono 64 bit. Non ci sono carri a 32 bit in Python.

Altri suggerimenti

I seguenti tipi - per la maggior parte - non esistono in Python, in primo luogo. In Python, stringhe vengono convertite in interi, long o galleggianti, perché questo è tutto quello che c'è.

Si sta chiedendo per le conversioni che non sono rilevanti per Python, in primo luogo. Ecco l'elenco dei tipi che hai chiesto e la loro Python equivalente.

  • unsigned e firmato Int 8 bit, int
  • unsigned e firmato int 16 bit, int
  • unsigned e firmato int 32 bit, senza segno: lunga , firmata int
  • unsigned e firmato int 64 bit, lunga

  • doppia, float

  • float, float
  • string, questo è ciò che si doveva cominciare con

Non so che cosa Quelli che seguono sono, quindi non so un Python equivalente.

  • unsigned e firmato 8 bit,
  • unsigned e firmato a 16 bit,
  • senza segno e con segno a 32 bit,
  • unsigned e firmato a 64 bit.

Hai già tutte le conversioni che contano:. int(), long() e float()

Python ha solo un unico tipo int. Per convertire una stringa in un int, uso int() in questo modo:

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

Modifica:. anche per convertire a stare a galla, utilizzare float() esattamente allo stesso modo

Non credo che questo possa essere necessariamente risolta bene senza ulteriori informazioni. Come altri hanno detto, ci sono solo int e lungo per gli interi in python - la lingua non aderisce al bit-larghezza e signedness archetipi dei linguaggi di programmazione di livello inferiore

.

Se si opera completamente entro python, allora probabilmente stai chiedendo la domanda sbagliata. C'è probabilmente un modo migliore per fare ciò che è necessario.

Se si interoperabilità con, per esempio, il codice C, o in rete, poi ci modi per fare questo, e sembra che la risposta alla tua precedente intervento coperto quel viale abbastanza comodamente .

ho appena avuto un problema in cui ho avuto un valore passato come un due a due a 16 bit firmato completare il numero da Modbus. Avevo bisogno di convertire questo ad un numero con segno. Ho finito di scrivere questo, che sembra funzionare bene.

# 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top