2017-10-13 45 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

是的。基本上,数据结构中变量的数量本身是可变的,这个数字将等于这个数据结构中存在的另一个变量的值。变量的大小也可以是动态的。 –