我第一次注意到这种差异
Python3:
>>> a = b'\x80\xad\x16\xc4\xb7\x9a'
>>> a
b'\x80\xad\x16\xc4\xb7\x9a'
>>> a[0]
128
Python2:
>>> a = b'\x80\xad\x16\xc4\xb7\x9a'
>>> a
b'\x80\xad\x16\xc4\xb7\x9a'
>>> a[0]
'\x80'
首先,为什么会发生这种情况?第二件事是,我不希望python3将其转换为十进制,并且希望输出与python2相同,如何做到这一点
编辑:
我试图做的是将以太网地址作为字节数组传递,并以正确的符号显示它
python2中的代码:
def eth_addr(a): # a = b'\x80\xad\x16\xc4\xb7\x9a'
b = "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x" % (ord(a[0]) , ord(a[1]) , ord(a[2]), ord(a[3]), ord(a[4]) , ord(a[5]))
return b
当我在python3中运行它时,它(显然)给了我以下错误:
TypeError: ord() expected string of length 1, but int found
这与十进制与十六进制无关,但在Python3中,单个字节表示为整数,在Python2中,非ascii字节表示为相同数字的十六进制值
您可以使用十六进制将小数转换为十六进制字符串:
或者使用
x
格式化程序:(删除
#
以避免0x
前缀)但是,您不能更改int与byte的行为
编辑
在Python 3中,修改后的示例实际上更简单:
甚至:
相关问题 更多 >
编程相关推荐