2017-10-13 65 views
1

我想在python中創建自己的自定義複雜數據結構。以下是相同的格式。如何在python中創建複雜的數據結構

DownloadInfoIndication() { 
    dsmccMessageHeader() { 
     protocolDiscriminator     8 bits 
     messageId        16 bits 
     transactionId       32 bits 
     adaptationLength      8 bits 
     messageLength       16 bits 
     if (adaptation length > 0) {  
      dsmccAdaptationHeader()   adaptationLength 
     } 
    } 
    downloadId         32 bits 
    windowSize         8 bits (0x00) 
    tCDownloadWindow       32 bits (0x00) 
    tCDownloadScenario       32 bits 
    numberOfModules        16 bits 
    for (i = 0; i < numberOfModules; i++) { 
     moduleId        16 bits 
     moduleSize        32 bits 
     moduleVersion       8 bits 
     moduleInfoLength      8 bits 
     for (j = 0; j < moduleInfoLength; j++) {  
      moduleInfoByte      moduleInfoLength 
     } 
    } 
    privateDataLength       16 bits 
    DescriptorCount        8 bits 
    for (k = 0; k < DescriptorCount; k++) { 
     tag          8 bits 
     length         8 bits 
     data         length 
    } 
} 

我試着探索struct模塊,但我無法獲得任何類似格式的例子。任何人都可以請幫忙。

+0

你能解釋一下如何解釋這些信息,還是我們應該猜測? –

+0

你有沒有嘗試過使用類? – Spinor8

+0

Hello @ PM2Ring,我會定義一個數據結構,其中將有變量protocolDiscriminator,messageId,transactionId,adaptationLength,messageLength等。然後根據adaptationLength的值,我將有另一個變量dsmccAdaptationHeader,其大小將等於變量adaptationLength。如果adaptationLength的值是0,那麼我不需要這個變量。同樣,你可以看到我有幾個for循環,這意味着for循環中變量的數量是動態的,並取決於其他值。我希望我的解釋有道理。 –

回答

0

不完全確定你的用例是什麼,但乍一看它看起來可以通過使用面向對象編程(OOP)進行處理。一個簡單的課就足夠了。

看看Python文檔:https://docs.python.org/3/tutorial/classes.html

+1

也許,但我懷疑OP需要的東西比由標準Python類型組成的簡單類更嚴格,特別是如果需要該數據結構來精確地表示二進制數據。所以他可能需要使用'struct'模塊,可能是'array'或Numpy,可能還有'ctypes'。 –

+0

是的。基本上,數據結構中變量的數量本身是可變的,這個數字將等於這個數據結構中存在的另一個變量的值。變量的大小也可以是動態的。 –