我正在Python 3中编写一个函数来实现LFSR。我已经解决了困难的部分,它实际上是使用反馈值逐步通过状态来获得密钥,并通过对密钥和输入数据进行AND运算来获得所有输出字节。为了使位移位、OR和XOR运算更容易,我对整数进行了所有运算,并将结果保存为整数,然而,这个函数需要一个返回类型bytes。我自己也在Google上搜索过,似乎一个可以接受的将整数转换为bytes对象的方法是类似result_bytes = result_bytes.to_bytes((result_bytes.bit_length() + 7) // 8, 'big')
的操作。运行hex_result_bytes = hex(result_bytes)
(注意,在此上下文中,result_bytes当前仍然是整数)并且我的result_bytes是具有值3187993425的整数,我得到了一个字符串结果“0xbe04eb51”,所以很明显我应该得到一个bytes对象,看起来像b'\xbe\x04\xeb\x51'。
在运行result_bytes = result_bytes.to_bytes((result_bytes.bit_length() + 7) // 8, 'big')
之后,我应该得到b'\xbe\x04\xeb\x51'。但是,我得到的结果是b'\xbe\x04\xebQ'。我是否遗漏了什么明显的东西?我甚至不知道我是如何得到Q的,因为Q显然不是可以作为十六进制字节得到的东西。
1条答案
按热度按时间htzpubme1#
这有点奇怪,我仍然不确定它为什么会这样,但实际上我运行了一个表达式,看看
b'\xbe\x04\xebQ' == b'\xbe\x04\xeb\x51'
,它的结果是True
,所以即使它看起来不一样,它们在大多数意图和目的上应该是一样的。