小编jir*_*mok的帖子

为什么 Python 3 中的索引字节返回 int 而不是 bytes?

尝试理解为什么获取 bytes 对象的索引会返回一个无法解码的 int,但切片会返回一个可以解码的 bytes 对象。这似乎不直观。当您对字符串执行相同的操作时,在字符串位置获取索引仍然会返回一个字符串。

在解决 Cryptopals 挑战时,我尝试迭代字节数组,对异或字符串进行频率分析,以计算纯文本字母的出现次数。我以为我可以执行以下操作,但我收到“int”对象没有属性“解码”错误。通过阅读 Python 文档,这是有道理的,字节数组是整数的可变序列,但在解释器中测试时,我期望不同的行为。

str_a = bytearray(b'\x1b77316?x\x15\x1b\x7f+x413=x9x(7-6<x7>x:9;76')

for x in str_a:
    _ = x.decode('ascii').upper() 
    if _ in counts:
        counts[_] += 1
Run Code Online (Sandbox Code Playgroud)

如果我将变量设置为单个字节,我可以对其调用decode()。我想我可以迭代字节字符串中的所有字节并以相同的方式解码(因此是上面的循环)。但是,由于 r[0] 是一个 int,所以这是行不通的。但如果我取 r[0:1],它会吗?我意识到我可以只调用 chr(r[0]),但我想如果 r.decode() 有效,那么 r[0].decode() 也应该有效。

>>> r = b'A'
>>> type(r)
<class 'bytes'>
>>> r.decode('ascii')
'A'
>>> r[0:1]
b'A'
>>> r[0:1].decode('ascii')
'A'
>>> type(r[0])
<class 'int'>
>>> r[0]
65
>>> r[0].decode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no …
Run Code Online (Sandbox Code Playgroud)

python-3.x

5
推荐指数
1
解决办法
1787
查看次数

标签 统计

python-3.x ×1