gpt4 book ai didi

python - 将字符串转换为大端,索引超出范围

转载 作者:行者123 更新时间:2023-11-28 18:49:55 24 4
gpt4 key购买 nike

我正在尝试将字符串转换为大端字节序,但由于我缺乏位移等方面的经验,到目前为止,我一直坚持使用以下方法:

def my_func(self, b):
a = [(len(b)+3) >> 2]

for i, val in enumerate(b):
a[i>>2] |= ord(b[i]) << (24-(i & 3)*8)
return a

以上返回错误 a[i>>2] |= ord(b[i]) << (24-(i & 3)*8)
IndexError: list index out of range
,并且也永远不会比 #4 更进一步地通过循环索引。

错误信息指向 a[] 列表。

谁能看出我在这里做错了什么?我正在从 JavaScript 移植这个,所以这可能是问题所在(链接到那个 http://pastebin.com/GKE3AeCm )

最佳答案

无需借助其他方法,您的代码只需从 Javascript 版本调整得更正确即可。在 Javascript 中,您正在创建一个特定长度的 Array,但在您的 Python 代码中,您总是创建一个大小为 1 的列表。这里更正了:

def my_func(b):
a = [0] * ((len(b)+3) >> 2)

for i, val in enumerate(b):
a[i>>2] |= ord(b[i]) << (24-(i & 3)*8)
return a

所以你正在做的是将 4 个对象的序列视为原始字节并将它们解包以构建一个整数。使用 struct,正确的方法是明确说明您的数据是字节并按此方式传递:

import struct

def my_func2(data):
lb = len(data)
if lb % 4:
data += b'\x00' * (4 - (lb % 4))
a = [struct.unpack('>i', data[i:i+4])[0] for i in range(0, lb, 4)]
return a

print(my_func2(b'pass123'))

关于python - 将字符串转换为大端,索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14534044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com