<div dir="ltr"><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">





<div bgcolor="#ffffff">
<div><font face="Arial" size="2">Hi,</font></div>
<div><font face="Arial" size="2"></font> </div>
<div><font face="Arial" size="2">I'm trying to use the construct library, but 
encountered a problem. May I know how do I implement the following using the 
construct library?</font></div><div class="im">
<div><font face="Arial" size="2"></font> </div>
<div><font face="Arial" size="2">typedef struct</font></div>
<div><font face="Arial" size="2">{</font></div>
<div><font face="Arial" size="2">    unsigned short 
size;</font></div>
</div><div><font face="Arial" size="2">    .</font></div>
<div><font face="Arial" size="2">    .</font></div>
<div><font face="Arial" size="2">}CodecInfo;</font></div><div class="im">
<div><font face="Arial" size="2"></font> </div>
<div><font face="Arial" size="2">typedef struct</font></div>
<div><font face="Arial" size="2">{</font></div>
<div><font face="Arial" size="2">    unsigned short 
size;</font></div>
</div><div><font face="Arial" size="2">    CodecInfo 
mastercodec;</font></div>
<div><font face="Arial" size="2">    CodecInfo 
slavecodec;</font></div>
<div><font face="Arial" size="2">}StatusInfo;</font></div>
<div><font face="Arial" size="2"></font> </div>
<div><font face="Arial" size="2">StatusInfo t;</font></div>
<div><font face="Arial" size="2">printf("%hu %hu\n", 
t.mastercodec.size,t.slavecodec.size);</font></div>
<div><font face="Arial" size="2"></font> </div>
<div><font face="Arial" size="2">Not sure how to include 2 copies of the CodecInfo 
Struct into StatusInfo Struct & be able to access CodecInfo's fields like 
the example above:</font></div>
<div><font face="Arial" size="2"></font> </div>
<div><font face="Arial" size="2">CodecInfo = Struct("CodecInfo",</font></div>
<div><font face="Arial" size="2">        
            .</font></div>
<div><font face="Arial" size="2">        
            .</font></div>
<div><font face="Arial" size="2">        
            .</font></div>
<div><font face="Arial" size="2">)</font></div>
<div><font face="Arial" size="2"></font> </div>
<div><font face="Arial" size="2">StatusInfo = Struct("StatusInfo",</font></div>
<div><font face="Arial" size="2">        
        CodecInfo,</font></div>
<div><font face="Arial" size="2">        
        CodecInfo</font></div>
<div><font face="Arial" size="2">)</font></div>
<div><font face="Arial" size="2"></font> </div>
<div><font face="Arial" size="2">Status = StatusInfo.parse(buf)</font></div>
<div> <br></div></div></blockquote><div><br>You can just nest Struct objects. Here's one implementation of what you're looking for:<br><br>from construct import *<br><br>def make_codec_info(name):<br>    return Struct(name,  ULInt16('size'))<br>

<br>StatusInfo = Struct('StatusInfo',<br>                        ULInt16('size'),<br>                        make_codec_info('mastercodec'),<br>                        make_codec_info('slavecodec'),<br>

                        )<br><br>c = StatusInfo.parse('\x12\x13\x01\x02\x03\x04')<br><br>print c<br><br>P.S. It is covered in the first part of construct's tutorial (<a href="http://construct.wikispaces.com/tut-basics">http://construct.wikispaces.com/tut-basics</a>). The tutorial is a pretty good starting point for using construct.<br>

<br>Eli<br><br> <br></div><div><br><br> </div></div><br></div>