2013-06-26 46 views
0

我需要在Objective-C中重寫一些Python腳本。這並不難,因爲Python易於閱讀,但是這段代碼讓我苦苦掙扎。str_to_a32 - 這個函數做什麼?

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

我並不積極,但我正在使用documentation進行刺探。

望着文檔,我們要根據格式字符串返回一條記錄:

解壓字符串(由包大概包裝(FMT,...))根據給定的格式。結果是一個元組,即使它只包含一個項目。該字符串必須包含格式所需的數據量(len(string)必須等於calcsize(fmt))。

在(b)未來的產品可能一個字節的緩衝區(表示爲字符串) - 看着他們所表示的\x逃逸,which consumes接下來的兩個字符爲十六進制的例子。

似乎格式字符串是

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

%%d要提出一個數字格式字符串,因此,如果B的長度爲32的格式串變得

`>8I` 

格式字符串的第一部分是>,其中documentation表示將字節順序設置爲big-endian,並將其大小設置爲標準。

I表示它將是一個大小爲4的無符號int(docs),其前面的8表示它將重複8次。

>IIIIIIII 

所以我覺得這是說:藉此字節的緩衝區,確保它是4的倍數由作爲必要附加許多0x00 s,則解包與儘可能多的無符號整數的元組因爲緩衝區中有4個字節的塊。

+0

他說什麼:) – theodox

+0

「a32」代表什麼? – wczekalski

+0

@Wojtek'32'可能指的是整數的大小(32位== 4字節)。 'a'可能只是說你會得到「32」,或者它可能意味着你正在使用的代碼中的其他內容。 – thegrinner

0

這需要一個字符串並將其轉換爲無符號整數的元組。如果你看看the python struct documentation,你會看到它是如何工作的。簡而言之,它處理Python值和表示爲Python字符串的C結構之間的轉換,以處理存儲在文件中的二進制數據(從提供的鏈接不經意地複製)。

在你的情況下,該函數接受一個字符串b並添加一些額外的字符以確保它是unsigned int的標準大小(請參閱鏈接),然後使用它將其轉換爲整數的元組big endian表示字符。這是'>'部分。I部分說使用unsigned integers