题
我需要将 Python 中的字符串转换为其他类型,例如无符号和有符号 8、16、32 和 64 位整数、双精度数、浮点数和字符串。
我怎样才能做到这一点?
解决方案
可以将字符串转换为与int
功能的32位带符号整数:
str = "1234"
i = int(str) // i is a 32-bit integer
如果该字符串不表示一个整数,你会得到一个ValueError
例外。但请注意,如果该字符串确实代表一个整数,但整数不适合32位有符号整数,那么你就会得到类型long
的对象,而不是。
然后,您可以将其转换为其他宽度和signednesses用一些简单的数学:
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
可以字符串转换为浮点与float
功能:
f = float("3.14159")
的Python浮子是什么其它语言称之为double
,即它们是64位。有没有32位浮点在Python。
其他提示
以下类型(大部分)在 Python 中一开始就不存在。在 Python 中,字符串被转换为整型、长整型或浮点数,因为仅此而已。
您首先要求进行与 Python 无关的转换。以下是您要求的类型及其 Python 等效类型的列表。
- 无符号和有符号 int 8 位, 整数
- 无符号和有符号 int 16 位, 整数
- 无符号和有符号 int 32 位,无符号: 长的, , 签 整数
无符号和有符号 int 64 位, 长的
双倍的, 漂浮
- 漂浮, 漂浮
- 细绳, 这就是你必须开始的
我不知道下面是什么,所以我不知道 Python 的等价物。
- 无符号和有符号 8 位,
- 无符号和有符号 16 位,
- 无符号和有符号 32 位,
- 未签名和签名 64 位。
您已经拥有所有重要的转换: int()
, long()
和 float()
.
的Python仅具有单个int
类型。将字符串转换成int
,使用int()
这样的:
>>> str = '123'
>>> num = int(str)
>>> num
123
修改:同时转换为浮动,以完全相同的方式使用float()
我不认为这必需要没有更多的信息很好回答。正如其他人所说,只有int和长整型在Python - 语言不符合较低级别的编程语言的位宽和符号性的原型
。如果你蟒之内完全操作,那么你可能会问错了问题。有可能是一个更好的方式做你所需要的。
如果您正在使用互操作,例如,C代码,或在网络上,则有是的方式来做到这一点,它看起来像回答您以前的帖子覆盖该途径相当得心应手
我刚才有一个问题,我必须为16位有符号二进制补码通过从MODBUS补数的值。 我需要将其转换为有符号数。 我结束了写这个,这似乎很好地工作。
# 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