在Python 2.7中将字符串更改为字节类型

时间:2012-05-30 10:29:43

标签: python types version byte

在python 3.2中,我可以轻松更改对象的类型。例如:

x=0
print(type (x))
x=bytes(0)
print(type (x))

它会给我这个:

<class 'int'>
<class 'bytes'>

但是,在python 2.7中,似乎我不能用同样的方式来做到这一点。如果我做相同的代码,它给我这个:

<type 'int'>
<type 'str'>

如何将类型更改为字节类型?

5 个答案:

答案 0 :(得分:13)

您没有更改类型,而是为变量指定不同的值。

你也在考虑python 2.x和3.x之间的一个基本区别;大致简化了2.x类型unicode已替换str类型,该类型本身已重命名为bytes。它恰好在您的代码中工作,因为更新版本的Python 2添加了bytes作为str的别名,以便于编写在两个版本下都能运行的代码。

换句话说,您的代码按预期工作。

答案 1 :(得分:8)

如何将类型更改为字节类型?

你不能,Python 2.7中没有'bytes'这样的类型。

从Python 2.7文档(5.6序列类型): “有七种序列类型:字符串,Unicode字符串,列表,元组,字节数组,缓冲区和xrange对象。”

从Python 3.2文档(5.6序列类型): “有六种序列类型:字符串,字节序列(字节对象),字节数组(bytearray对象),列表,元组和范围对象。”

答案 2 :(得分:4)

在Python 2.x中,bytes只是str的别名,所以一切都按预期工作。此外,您不会在此处更改任何对象的类型 - 您只需将名称x重新绑定到其他对象。

答案 3 :(得分:0)

可能不完全是您所需要的,但是当我需要获取字节d8的十进制值(这是一个在文件中提供偏移量的字节)时,我做了:

a = (data[-1:])          # the variable 'data' holds 60 bytes from a PE file, I needed the last byte
                         #so now a == '\xd8'  , a string
b = str(a.encode('hex')) # which makes b == 'd8' , again a string
c = '0x' + b             # c == '0xd8' , again a string
int_value = int(c,16)    # giving me my desired offset in decimal: 216

                         #I hope this can help someone stuck in my situation

答案 4 :(得分:0)

仅举一个强调将常规字符串转换为二进制字符串然后返回的过程的示例:

--deployUrl

现在倒退

sb = "a0" # just string with 2 characters representing a byte
ib = int(sb, 16) # integer value (160 decimal)
xsb = chr(ib) # a binary string (equals '\xa0')