试图理解为什么接受字节对象的索引会返回一个不能解码的int,但是切片会返回一个可以解码的字节对象。这似乎不合常理。当您对字符串执行相同的操作时,在字符串位置使用索引仍然会返回一个字符串。
在处理密码挑战时,我尝试在字节数组上迭代,对XORed字符串进行频率分析,以计数纯文本字母的出现数。我想我可以做以下工作,但是我得到了'int‘对象没有属性'decode’错误。从读取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如果将变量设置为单个字节,则可以在其上调用decode()。我想我可以在字节字符串中迭代所有字节,并以同样的方式解码(因此上面的循环就是这样)。但是,因为r是一个int,所以这是行不通的。但如果我用r0:1,它会吗?我意识到我可以只调用chr(r),但我想如果r.decode()工作,r.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 attribute 'decode'字符串示例
>>> x = 'AB'
>>> type(x)
<class 'str'>
>>> x[0]
'A'
>>> type(x[0])
<class 'str'>发布于 2020-05-10 16:17:03
发布于 2020-05-10 00:31:46
你已经发现了字节迭代器生成整数,而不是字符。。您需要使用chr将int值转换为str值。
import collections
import string
str_a = b"\x1b77316?x\x15\x1b\x7f+x413=x9x(7-6<x7>x:9;76"
count = collections.defaultdict(int)
for value in str_a:
value = chr(value).upper()
if value in string.ascii_uppercase:
count[value] += 1https://stackoverflow.com/questions/61705338
复制相似问题