在Python中,为什么有些字节字符串中有\x,而另一些则没有?

问题描述 投票:0回答:2

我很难理解为什么以及为什么有些Python字节字符串中有

\x
,而其他的则没有。

比如我有这样的断言:

AssertionError: 
actual b'00000001'
expected b'\x00\x00\x00\x01'

为什么它们不相等?它们都是字节字符串,长度为 4 个字节,值为 1。如何使它们看起来相同,以及如何使它们“成为”相同?似乎一个来自字符串字符串,另一个来自整数 - 但为什么它们转换为字节时结果不一样?

希望我没有错过其他东西。

谢谢

python types byte
2个回答
4
投票

它们不是同一件事。

\x
表示十六进制值。

如果没有

\x
,它只是一个原始字节字符串,每个字符代表它自己的整数值。

演示:

>>> a = b'00000001'
>>> b = b'\x00\x00\x00\x01'
>>> int.from_bytes(a, 'little')
3544385890265608240
>>> int.from_bytes(b, 'little')
16777216
>>> len(a)
8
>>> len(b)
4
>>> a.hex()
'3030303030303031'
>>> b.hex()
'00000001'
>>> a[0]
48
>>> b[0]
0

此外,由于我们从上面可以看到,

b'0'
48
表示,并且由于
48 = 16*3
,这意味着
b'\x30'
应该等于
b'0'

>>> b'0' == b'\x30'
True

-3
投票

?????? (EMT)。是的。每周 360 小时 每周 00:00 11:59 18:00 开始

© www.soinside.com 2019 - 2024. All rights reserved.