擅长:python、mysql、java
<p>我知道这个答案有点晚了,但至少对其他在搜索结果中找到这个问题的人是有用的。因为你说Delphi代码发送和接收“C兼容的数据”,似乎为了回答Python的处理,它与另一端的Delphi(或任何其他语言)无关。。。在</p>
<p>python<em>struct</em>和<em>socket</em>模块具有您描述的基本用法的所有功能。要发送示例记录,请执行如下操作。为了简单和健全,我假定有符号整数和双精度,并将数据打包为“网络顺序”(bigendian)。这很容易成为一行代码,但为了冗长和可重用性的原因,我将其拆分:</p>
<pre><code>import struct
t_packet_struc = '>iiid'
t_packet_data = struct.pack(t_packet_struc, pid, data_type, size, value)
mysocket.sendall(t_packet_data)
</code></pre>
<p>当然,如果对格式字符串、数据准备等进行了调整,则不需要进行上述“假定”。有关可能的格式字符串的描述,请参阅<em>struct</em>内联帮助-它甚至可以处理Pascal字符串之类的内容。。。顺便说一句,<em>socket</em>模块允许打包和解包一些<em>struct</em>没有的特定于网络的东西,比如IP地址字符串(到它们的bigendian int blob格式),并允许显式函数将数据bigendian转换为native,反之亦然。为了完整起见,下面是如何在Python端解压上面打包的数据:</p>
^{pr2}$
<p>我知道这在pythonversion2.x中是可行的,并且怀疑它在pythonversion3.x中也可以正常工作。小心一个大问题(因为很容易不去思考,而且事后很难排除):除了不同的结尾,您还可以区分使用“标准大小和对齐方式”(可移植)或使用“本机大小和对齐方式”(更快)进行打包,这取决于您如何给格式字符串加前缀(或不加前缀)。这些通常会产生与你预想的大不相同的结果,而不会告诉你为什么。。。(有龙)。在</p>