在Python中进行类型转换

时间:2008-12-22 04:35:18

标签: python string int bit casting

我需要将Python中的字符串转换为其他类型,例如unsigned和signed 8,16,32和64位int,double,float和strings。

我该怎么做?

5 个答案:

答案 0 :(得分:38)

您可以使用int函数将字符串转换为32位有符号整数:

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

如果字符串不表示整数,则会出现ValueError异常。但是请注意,如果字符串确实表示一个整数,但该整数不适合32位有符号的int,那么实际上你将获得一个类型为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位浮点数。

答案 1 :(得分:3)

以下类型 - 大多数情况下 - 首先不存在于Python中。在Python中,字符串被转换为整数,长整数或浮点数,因为这就是全部。

首先,您要求的转换与Python无关。这是您要求的类型列表及其Python等价物。

  • unsigned and signed int 8 bits, int
  • unsigned and signed int 16 bits, int
  • unsigned and signed int 32 bits,unsigned: long ,签名 int
  • unsigned and signed int 64 bits, long

  • 加倍,浮动

  • 浮动,浮动
  • 字符串,这是您必须从
  • 开始的

我不知道以下是什么,所以我不知道Python的等价物。

  • 未签名并签名8位,
  • 无符号并签名16位,
  • 无符号并签名32位,
  • 未签名并签名64位。

您已完成所有重要的转换:int()long()float()

答案 2 :(得分:2)

Python只有一个int类型。要将字符串转换为int,请使用int(),如下所示:

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

修改:要转换为float,请以完全相同的方式使用float()

答案 3 :(得分:0)

如果没有更多信息,我认为这不一定能得到很好的回答。正如其他人所说,python中只有int和long for整数 - 该语言不符合低级编程语言的位宽和签名原型。

如果你在python中完全操作,那么你可能会问错误的问题。可能有更好的方法来做你需要的事情。

如果您正在与C代码或通过网络进行互操作,那么 方法可以做到这一点,而且您之前发布的内容的答案看起来非常方便

答案 4 :(得分:0)

我现在遇到一个问题,我有一个值传递为来自Modbus的16位带符号二进制补码。 我需要将其转换为带符号的数字。 我最终写了这篇,看起来不错。

# 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