0

我需要在 Objective-C 中重写一些 Python 脚本。这并不难,因为 Python 很容易阅读,但是这段代码让我有点吃力。

def str_to_a32(b):
    if len(b) % 4:
        # pad to multiple of 4
        b += '\0' * (4 - len(b) % 4)
    return struct.unpack('>%dI' % (len(b) / 4), b)

这个功能应该做什么?

4

3 回答 3

4

我不是很肯定,但我正在使用文档来尝试一下。

查看文档,我们将根据格式字符串返回一个元组:

根据给定的格式解包字符串(大概是由 pack(fmt, ...) 打包的)。结果是一个元组,即使它只包含一个项目。字符串必须准确包含格式所需的数据量(len(string) 必须等于 calcsize(fmt))。

进入 ( b)的项目可能是一个字节缓冲区(表示为字符串) - 查看它们表示为\x转义的示例,它将接下来的两个字符用作十六进制。

看来格式字符串是

'>%dI' % (len(b) / 4)

%and会将一个数字放入格式字符串中,因此如果 b的%d长度为 32,则格式字符串变为

`>8I`

格式字符串的第一部分是>文档中说将字节顺序设置为 big-endian 并将大小设置为标准。

I表示它将是一个大小为 4 ( docs )的unsigned int ,它前面的 8 表示它将重复 8 次。

>IIIIIIII

所以我认为这是在说:获取这个字节缓冲区,通过附加尽可能多的 s 来确保它是 4 的倍数0x00,然后将其解压缩到一个元组中,其中的无符号整数与缓冲区中 4 个字节的块一样多。

于 2013-06-26T19:50:34.403 回答
0

看起来它应该采用表示为字符串的输入字节数组并将它们解压缩为大端(“>”)无符号整数(“I”)格式代码在http://docs.python 中进行了说明。 org/2/library/struct.html

于 2013-06-26T19:53:17.263 回答
0

这需要一个字符串并将其转换为无符号整数的元组。如果您查看pythonstruct文档,您将了解它是如何工作的。简而言之,它处理 Python 值和表示为 Python 字符串的 C 结构之间的转换,用于处理存储在文件中的二进制数据(从提供的链接中毫不客气地复制)。

在您的情况下,该函数接受一个字符串,b并添加一些额外字符以确保它是无符号整数的标准大小(请参阅链接),然后使用大端表示将其转换为整数元组人物。这是“>”部分。该I部分说使用无符号整数

于 2013-06-26T19:55:43.147 回答