我需要将 Python 中的字符串转换为其他类型,例如无符号和有符号 8、16、32 和 64 位整数、双精度、浮点数和字符串。
我怎样才能做到这一点?
您可以使用以下函数将字符串转换为 32 位有符号整数int
:
str = "1234"
i = int(str) // i is a 32-bit integer
如果字符串不代表整数,则会出现ValueError
异常。但是请注意,如果字符串确实表示一个整数,但该整数不适合 32 位有符号整数,那么您实际上会得到一个类型的对象long
。
然后,您可以通过一些简单的数学将其转换为其他宽度和符号:
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 位的。Python 中没有 32 位浮点数。
以下类型——在大多数情况下——首先在 Python 中不存在。在 Python 中,字符串被转换为整数、长整数或浮点数,因为这就是全部。
您首先要求进行与 Python 无关的转换。这是您要求的类型列表及其 Python 等效项。
无符号和有符号 int 64 位, 长
双, 浮动
我不知道以下是什么,所以我不知道 Python 等价物。
您已经拥有所有重要的转换int()
:long()
和float()
。
Python 只有一种int
类型。要将字符串转换为int
,请int()
像这样使用:
>>> str = '123'
>>> num = int(str)
>>> num
123
编辑:也转换为浮动,float()
以完全相同的方式使用。
如果没有更多信息,我认为这不一定能很好地回答。正如其他人所说,python 中的整数只有 int 和 long ——该语言不遵循低级编程语言的位宽和符号原型。
如果您完全在 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