Question

Je dois convertir des chaînes en Python à d'autres types tels que non signé et signé 8, 16, 32 et 64 ints bits, double, flotteurs et cordes.

Comment puis-je faire?

Était-ce utile?

La solution

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 nombre entier, vous obtiendrez une exception ValueError. Notez toutefois que si la chaîne ne représentent un nombre entier, mais cet entier ne rentre pas dans un int signé 32 bits, alors vous obtenez en fait un objet de type long à la place.

Vous pouvez ensuite le convertir à d'autres largeurs et signednesses avec quelques calculs 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")

flotteurs Python sont ce que les autres langues appellent double, à savoir qu'ils sont 64 bits. Il n'y a pas de flotteurs 32 bits en Python.

Autres conseils

Les types suivants - pour la plupart - n'existent pas en Python en premier lieu. En Python, les chaînes sont converties en ints, longs ou flottants, parce que tout y est.

Vous demandez des conversions qui ne sont pas pertinentes pour Python en premier lieu. Voici la liste des types que vous avez demandés et leur équivalent Python.

  • non signé et entier signé 8 bits, int
  • non signé et entier signé sur 16 bits, int
  • non signé et entier signé 32 bits, non signé: long , signé int
  • unsigned int et signé 64 bits, longue

  • double, float

  • flotteur, float
  • string, c'est ce que vous avez dû commencer par

Je ne sais pas ce que les éléments suivants sont, donc je ne sais pas d'équivalent Python.

  • non signé et signé 8 bits,
  • 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 comptent:. int(), long() et float()

Python ne dispose que d'un seul type de int. Pour convertir une chaîne à une int, utilisez int() comme ceci:

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

Edit:. également convertir à flotter, utilisez float() de la même manière exacte

Je ne pense pas que cela puisse nécessairement être bien répondu sans plus d'informations. Comme d'autres l'ont dit, il n'y a que int et long pour les entiers en python - la langue ne respecte pas les archétypes bit largeur et signedness des langages de programmation de bas niveau

.

Si vous travaillez complètement dans python, vous vous demandez probablement la mauvaise question. Il y a probablement une meilleure façon de faire ce que vous avez besoin.

Si vous travailliez avec, par exemple, le code C, ou sur le réseau, puis il y a sont façons de faire , et il semble que la réponse à votre commentaire précédent a couvert cette avenue assez haut la main .

Je viens maintenant eu un problème où j'avais une valeur passée en 16 bits signés twos nombre de compléter modbus. Je avais besoin de convertir en un nombre signé. Je fini par écrire ce qui semble fonctionner très 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top