You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中将32位Float和64位Double转为字节用于TCP通信?

Python TCP发送指定格式数据包:浮点数字节转换方案

你原来处理32位整数的代码可以简化成更简洁的写法,效果完全一致:

# 直接生成4字节小端序的整数字节数组
buffer = bytearray(bufferLength.to_bytes(4, 'little'))

接下来处理32位float和64位double的字节转换,Python的struct模块是专门干这个的,它能直接把数值按指定字节序和类型转换成字节串,完美适配你的需求:

转换步骤

  • 32位float(字节4-7):用struct.pack('<f', float_val)生成小端序的4字节数据,其中<表示小端序,f对应32位单精度浮点数。
  • 64位double(字节8-15):用struct.pack('<d', double_val)生成小端序的8字节数据,d对应64位双精度浮点数。

完整示例代码

把三个部分整合起来,最终的缓冲区构造代码如下:

import struct

# 假设你要发送的数值
buffer_length = 16  # 总缓冲区长度是16字节(4+4+8)
float_val = 3.1415
double_val = 2.7182818284

# 1. 构造32位整数部分(字节0-3)
buffer = bytearray(buffer_length.to_bytes(4, 'little'))

# 2. 加入32位float(字节4-7)
float_bytes = struct.pack('<f', float_val)
buffer[4:8] = float_bytes

# 3. 加入64位double(字节8-15)
double_bytes = struct.pack('<d', double_val)
buffer[8:16] = double_bytes

# 之后就可以把buffer通过TCP发送给C++服务器了
# sock.send(buffer)

注意事项

  • 确保C++服务器解析时使用小端序,和Python这边的转换规则保持一致,否则会出现数据解析错误。
  • 如果你的bufferLength指的是后续数据的长度(而非总缓冲区长度),记得调整总缓冲区的大小,比如总长度是4 + 4 + 8 + bufferLength,但根据你原来的描述,这里按总长度16字节处理。

内容的提问来源于stack exchange,提问作者Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 12:03:20