it-swarm.com.de

Typecasting in Python

Ich muss Strings in Python in andere Typen wie unsignierte und signierte 8, 16, 32 und 64 Bit-Ints, Doubles, Floats und Strings konvertieren.

Wie kann ich das machen?

19
user46646

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

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

Wenn die Zeichenfolge keine ganze Zahl darstellt, wird eine ValueError-Ausnahme angezeigt. Beachten Sie jedoch, dass, wenn die Zeichenfolge eine Ganzzahl darstellt, diese Ganzzahl jedoch nicht in ein 32-Bit-Integer mit Vorzeichen passt, tatsächlich ein Objekt des Typs long angezeigt wird.

Sie können es dann mit ein paar einfachen Berechnungen in andere Breiten und Vorzeichenwerte konvertieren:

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 mit der Funktion float in Fließkommazahl konvertieren:

f = float("3.14159")

Python-Floats sind die, auf die sich andere Sprachen als double beziehen, d. H. Sie sind 64-Bit. In Python gibt es keine 32-Bit-Floats.

36
Adam Rosenfield

Die folgenden Typen sind größtenteils in Python gar nicht vorhanden. In Python werden Strings in Ints, Longs oder Floats konvertiert, da dies alles ist.

Sie fragen nach Konvertierungen, die für Python überhaupt nicht relevant sind. Hier ist die Liste der Typen, nach denen Sie gefragt haben, und deren Python-Entsprechung.

  • vorzeichenlose und vorzeichenlose int 8 bit, int
  • vorzeichenlose und vorzeichenbehaftete int 16 Bits, int
  • unsigniert und vorzeichenlos int 32 bit, unsigniert: long , signiert int
  • vorzeichenlose und vorzeichenlose int 64 Bits, long

  • doppelt, float

  • schwimmer, Schwimmer
  • string, das wars, womit du anfangen musstest

Ich weiß nicht, was die folgenden sind, also kenne ich kein Python-Äquivalent.

  • unsigniertes und signiertes 8 Bit, 
  • unsigniert und signiert 16 Bit, 
  • unsigniert und signiert 32 Bit,
  • unsigniert und signiert 64 Bit.

Sie haben bereits alle wichtigen Konvertierungen: int(), long() und float().

3
S.Lott

Python hat nur einen einzigen int-Typ. Um eine Zeichenfolge in eine int zu konvertieren, verwenden Sie int() wie folgt:

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

Bearbeiten: Verwenden Sie auch float() auf dieselbe Weise, um in Float zu konvertieren.

2
Jeremy Ruten

Ich hatte gerade ein Problem, bei dem ich einen Wert als 16-Bit-Zwei-Komplement-Nummer von Modbus übergeben hatte. Ich musste diese in eine signierte Zahl konvertieren. Ich endete damit, dies zu schreiben, was 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
0
user50619

Ich glaube nicht, dass dies ohne weitere Informationen notwendigerweise gut beantwortet werden kann. Wie andere bereits gesagt haben, gibt es in Python nur Int und Long für Ganzzahlen - die Sprache hält sich nicht an die Bitbreiten- und Vorzeichen-Archetypen von untergeordneten Programmiersprachen.

Wenn Sie sich vollständig innerhalb von Python befinden, stellen Sie wahrscheinlich die falsche Frage. Es gibt wahrscheinlich einen besseren Weg, um das zu tun, was Sie brauchen.

Wenn Sie beispielsweise mit C-Code oder über das Netzwerk zusammenarbeiten, gibt es gibt Möglichkeiten, dies zu tun, und es sieht so aus, als ob die Antwort auf Ihr vorheriges Posting diesen Weg ziemlich handlich darstellt.

0
Jorenko