web-dev-qa-db-fra.com

Conversion de caractères en Python

J'ai besoin de convertir des chaînes en Python en d'autres types tels que les ints, les doubles, les float et les chaînes 8, 16, 32 et 64 bits non signés et signés.

Comment puis-je faire ceci?

19
user46646

Vous pouvez convertir une chaîne en un entier signé 32 bits avec la fonction int:

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

Si la chaîne ne représente pas un entier, vous obtiendrez une exception ValueError. Notez cependant que si la chaîne représente un entier, mais que cet entier ne rentre pas dans un entier signé 32 bits, vous obtiendrez un objet de type long à la place.

Vous pouvez ensuite le convertir en d’autres largeurs et signatures en quelques mots 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

Vous pouvez convertir des chaînes en virgule flottante avec la fonction float:

f = float("3.14159")

Les flottants Python sont ce que d’autres langages appellent double, c’est-à-dire qu’ils sont 64 bits. Il n'y a pas de float 32 bits en Python.

36
Adam Rosenfield

Les types suivants - pour la plupart - n'existent pas en Python. En Python, les chaînes sont converties en ints, long ou float, car c'est tout ce qui existe.

Vous demandez des conversions non pertinentes pour Python. Voici la liste des types que vous avez demandés et leur équivalent en Python.

  • non signé et signé int 8 bits, int
  • non signé et signé int 16 bits, int
  • non signé et signé int 32 bits, non signé: long , signé int
  • non signé et signé int 64 bits, long

  • double, float

  • float, float
  • string, voici ce que vous deviez commencer

Je ne sais pas ce qui suit, alors je ne connais pas d’équivalent Python.

  • non signé et signé 8 bit, 
  • non signé et signé 16 bits, 
  • non signé et signé 32 bits,
  • non signé et signé 64 bits.

Vous avez déjà toutes les conversions qui importent: int(), long() et float().

3
S.Lott

Python n'a qu'un seul type int. Pour convertir une chaîne en int, utilisez int() comme ceci:

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

Edit: Aussi pour convertir en float, utilisez float() exactement de la même manière.

2
Jeremy Ruten

Je venais tout juste de rencontrer un problème où je devais transmettre une valeur sous forme de numéro de complément à deux signés 16 bits signé modbus .J'ai eu besoin de la convertir en un nombre signé . .

# 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

Je ne pense pas que l'on puisse nécessairement répondre à cette question sans plus d'informations. Comme d'autres l'ont déjà dit, il n'existe que des entiers et entiers dans python - le langage n'adhère pas aux archétypes de largeur de bits et de signature des langages de programmation de bas niveau.

Si vous utilisez complètement Python, vous posez probablement la mauvaise question. Il y a probablement une meilleure façon de faire ce dont vous avez besoin.

Si vous interagissez avec, par exemple, le code C ou sur le réseau, il y a il y a moyens de le faire, et il semble que la réponse à votre message précédent couvrait assez facilement cette avenue.

0
Jorenko