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?
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.
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 64 bits, long
double, float
Je ne sais pas ce qui suit, alors je ne connais pas d’équivalent Python.
Vous avez déjà toutes les conversions qui importent: int()
, long()
et float()
.
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.
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
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.