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

在Python 2.7中将字符串更改为字节类型,python,types,version,byte,Python,Types,Version,Byte,在Python3.2中,我可以轻松地更改对象的类型。例如: x=0 print(type (x)) x=bytes(0) print(type (x)) 它会给我这个: <class 'int'> <class 'bytes'> <type 'int'> <type 'str'> 但是,在Python2.7中,我似乎不能使用相同的方法来实现它。如果我使用相同的代码,它会给出以下信息: <class 'int'> <cla

在Python3.2中,我可以轻松地更改对象的类型。例如:

x=0
print(type (x))
x=bytes(0)
print(type (x))
它会给我这个:

<class 'int'>
<class 'bytes'>
<type 'int'>
<type 'str'>

但是,在Python2.7中,我似乎不能使用相同的方法来实现它。如果我使用相同的代码,它会给出以下信息:

<class 'int'>
<class 'bytes'>
<type 'int'>
<type 'str'>


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

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

您还发现了Python2.x和3.x之间的一个基本区别;大大简化的2.x类型
unicode
取代了
str
类型,该类型本身已被重命名为
bytes
。它恰好在您的代码中工作,因为较新版本的Python 2添加了
bytes
作为
str
的别名,以便于编写在这两个版本下都能工作的代码


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

在Python2.x中,
bytes
只是
str
的别名,因此一切都按预期工作。此外,您没有在此处更改任何对象的类型–您只是将名称
x
重新绑定到另一个对象。

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

不能,在Python2.7中没有“bytes”这样的类型

来自Python 2.7文档(5.6序列类型): 有七种序列类型:字符串、Unicode字符串、列表、元组、ByteArray、缓冲区和xrange对象

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

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


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

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')
现在向后看

back_sb = xsb.encode('hex')
back_sb == sb # returns True

那么在2.7中,我有没有办法在3.2中做同样的事情?我只希望它是一个字节类型。那么在2.7中,我有没有办法在3.2中做同样的事情?我只希望它是字节类型。python 2.7中的type
str
bytes
类型。Martin的答案有相关信息。
>>str是bytes
True
——python2.x中有一个二进制序列类型——它是
str