我正在尝试将无符号整数数据从 C 服务器发送到 Python 客户端。要求是向客户端发送负浮点值。目前这个数字是-5.700,我有两个问题。 1) 我不知道如何在 uint32_t 中保留负值,我使用 MSB 作为标志位来绕过它。这样可以吗?有没有人有更好的建议?
2) 我尝试将 float 5.700 类型转换为 uint32_t,即
uint32_t fops = *(uint32_t*)(&float_var)//float_var 为 5.700
并且 fops 被分配值 0x00..40b66666 被发送到 python 客户端。现在如何从客户端的这个值中取回 float ?
更新:正如 Mats 建议的那样,python struct unpacks -ve 完美 float ,因此无需使用标志位。
最佳答案
最简单的解决方案几乎总是最好的:将其设为字符串并传输,而不是二进制浮点表示。这样,您就不必担心浮点表示的差异或如何让 Python “理解”您的二进制浮点值。
Edit1:但是,如果将 32 位整数传输到 Python data
对象:我希望 floatdata = struct.unpack("f", data)
应该做的伎俩。
Edit2:struct.unpack
的文档(和 struct.pack
)
Edit3:struct.unpack
假设两台机器使用相同的浮点格式。这意味着该软件不能广泛移植。但它应该可以在大多数常用平台上正常工作。
关于python - 将负 float 转换为无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18412858/