<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>