【发布时间】:2013-08-23 22:32:56
【问题描述】:
我正在尝试将无符号整数数据从 C 服务器发送到 python 客户端。要求是向客户端发送一个负浮点值。目前这个数字是 -5.700,我有 2 个问题。 1)我不知道如何在 uint32_t 中保留负性,我使用 MSB 作为标志位来解决它。这样好吗?谁有更好的建议?
2) 我尝试将 float 5.700 类型转换为 uint32_t,即
uint32_t fops = *(uint32_t*)(&float_var) //float_var is 5.700
并且 fops 被分配了值 0x00..40b66666,该值正在发送到 python 客户端。现在如何在客户端从这个值中取回浮点数?
更新:正如 Mats 建议的那样,python struct unpacks -ve 完美浮动,因此无需使用标志位。
【问题讨论】:
-
你是如何进行传输的,为什么涉及 uint32_t?
-
客户端/服务器通信通常通过 TCP(有时是 UDP)进行。 TCP 是一个字节序列。要发送浮点数,您必须(以某种方式)将浮点数转换为字节序列,传输该序列,然后重新组装浮点数。你如何做到这一点取决于你。 (虽然现在有几个库可以做这样的事情,比如 JSON、BSON、Protocol Buffers、MessagePack……)如果你能澄清你在做什么,以及你正在与什么协议进行通信会很好。跨度>
-
另外,你确定那个演员表是 0x00006666 / 26214 吗?这很可能对应于 3.6-ish * 10^-41 的浮点数。
0xc0b66666或0x40b66666更有可能。 -
传输是通过 tcp 套接字进行的,但我遵循一个协议,该协议在位级别定义数据,因此是无符号值。服务器是用 c 编写的,我使用 tcp 发送 unint 数据并使用 python struct 解包它们。
-
Python 结构有一个浮点类型,可能适合你。发送 4 个字节,在 python 端将其称为浮点数,看看会发生什么。如果你的两台机器就什么是浮点数达成一致,那么它应该可以工作。