Frage

Ich muß andere Typen wie unsigned Strings in Python konvertieren und unterzeichnet 8, 16, 32 und 64 Bit ints, verdoppelt, Schwimmern, und Streicher.

Wie kann ich das tun?

War es hilfreich?

Lösung

Sie können einen String in eine 32-Bit-Ganzzahl mit Vorzeichen mit der int Funktion konvertieren:

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

Wenn die Zeichenfolge nicht eine ganze Zahl darstellt, erhalten Sie eine ValueError Exception. Beachten Sie jedoch, dass, wenn die Zeichenfolge eine ganze Zahl darstellt, aber die ganze Zahl paßt nicht in einen 32-Bit signed int, dann werden Sie tatsächlich stattdessen ein Objekt vom Typ long erhalten.

Sie können dann wandeln sie in anderen Breiten und signednesses mit einigen einfachen Mathematik:

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

Sie können Strings konvertieren Punkt mit der float Funktion floating:

f = float("3.14159")

Python Schwimmer ist, was andere Sprachen als double beziehen, das heißt, sie sind 64-Bit. Es gibt keine 32-Bit-Floats in Python.

Andere Tipps

Die folgenden Typen - zum größten Teil - existieren nicht in Python an erster Stelle. In Python sind Strings Ints, sehnt oder Schwimmer umgewandelt, weil das ist alles da ist.

Sie fragen für Konvertierungen, die nicht relevant für Python in erster Linie sind. Hier ist die Liste von Typen, die Sie gefragt und ihre Python-Äquivalent.

  • unsigned und signed int 8 Bits, int
  • unsigned und signed int 16 Bit, int
  • unsigned und signed int 32 Bit, ohne Vorzeichen: lang , unterzeichnet int
  • unsigned und signed int 64 Bit, lang

  • Doppel, float

  • float, float
  • string, das ist, was Sie mit
  • beginnen hatten

Ich weiß nicht, was die folgenden sind, so dass ich weiß nicht, eine Python-Äquivalent.

  • unsigned und unterzeichnet 8 bit,
  • unsigned und signierte 16-Bit,
  • unsigned und signierten 32-Bit,
  • unsigned und signiert 64-Bit.

Sie haben bereits alle Umwandlungen, die Materie. int(), long() und float()

Python hat nur einen einzigen int Typen. Um einen String in einen int zu konvertieren, verwenden int() wie folgt aus:

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

Edit:. Auch zu schweben zu konvertieren, verwenden float() in genau der gleichen Art und Weise

Ich glaube nicht, kann dies notwendigerweise auch ohne weitere Informationen beantwortet werden. Wie schon andere gesagt haben, gibt es nur int und lange für ganze Zahlen in Python - die Sprache nicht auf die Bit-Breite und Signedness Urbilder niedrigerer Ebene Programmiersprachen haften bleibt

.

Wenn Sie sich vollständig in Python arbeiten, dann fragen Sie sich wahrscheinlich die falsche Frage. Es gibt wahrscheinlich einen besseren Weg zu tun, was Sie brauchen.

Wenn Sie mit sind interoperabel, zum Beispiel, Code C oder über das Netzwerk, dann gibt sind Möglichkeiten, dies zu tun, und es sieht aus wie die Antwort auf Ihr vorheriges Posting abgedeckt, dass avenue ziemlich handlich .

Ich hatte gerade jetzt ein Problem, wo ich als 16 Bit signed Zweier-Komplement-Zahl von modbus bestand Wert hatte. Ich brauchte diese zu einer signierten Zahl zu konvertieren. Ich landete das Schreiben, das gut zu funktionieren scheint.

# 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top