str_to_a32 - 这个功能有什么作用?

时间:2013-06-26 19:34:28

标签: python

我需要在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)

这个功能应该做什么?

3 个答案:

答案 0 :(得分:3)

我不是肯定的,但是我正在使用documentation来刺激它。

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

  

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

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

格式字符串似乎是

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

%%d将在格式字符串中添加一个数字,因此如果b的长度为32,则格式字符串变为

`>8I`

格式字符串的第一部分是>which consumes表示将字节顺序设置为big-endian,大小设置为标准。

I表示它将是一个大小为4(documentation)的无符号整数,而它前面的8表示它将重复8次。

>IIIIIIII

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

答案 1 :(得分:0)

看起来它应该将一个字节输入数组表示为字符串并将它们解压缩为big-endian(“>”)无符号整数('I')格式代码在{{3}中解释}

答案 2 :(得分:0)

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

在你的情况下,函数接受一个字符串b并添加一些额外的字符以确保它是unsigned int的标准大小(参见链接),然后将其转换为元组使用字符的big endian表示的整数。这是'>'部分。 I部分表示要使用unsigned integers