擅长:python、mysql、java
<p>您可以在正确连接的socket上使用<code>.recv</code>调用来接收数据包的50个字节(在TCP数据包不太可能出现碎片的情况下,实际上可能需要多个调用,因此请检查传入长度,直到您手头正好有50个字节;-)。在</p>
<p>在那之后,理解C代码是令人费解的。将<code>int</code>s(大概每个4个字节)分配给<code>Packet[9]</code>、<code>Packet[13]</code>等等,给人的印象是,在<code>Packet</code>内一次设置4个字节,但事实并非如此:每个赋值在包中只设置一个字节,从<code>int</code>的最低字节开始,即赋值的RHS。但是这些字节是<code>(int)(720000+armcontrolpacket->dof0_rot*1000)</code>的字节,等等。。。在</p>
<p>那么,包的最后44个字节必须解释为11个4字节整数(有符号吗?未签名?)还是44个独立的价值观?我猜是前者,然后</p>
<pre><code>import struct
f = '>x4bx11i'
values = struct.unpack(f, packet)
</code></pre>
<p>格式<code>f</code>表示:big-endian,4个无符号字节值被两个忽略的“空闲”字节包围,11个4字节有符号整数。元组<code>values</code>以15个值结束:4个单字节(在您的示例中是50、1、2、1),然后是11个有符号整数。您可以使用相同的格式字符串将元组的修改版本打包回一个50字节的数据包中以重新发送。在</p>
<p>由于您显式地将长度放入数据包中,可能是不同的数据包具有不同的长度(尽管这与C示例中的固定长度声明不兼容),在这种情况下,您需要更准确地接收和解包它;但是这些详细信息取决于您没有提供的信息,所以我不想猜了;—)。在</p>