python - 将负 float 转换为无符号整数

标签 python c sockets unsigned

我正在尝试将无符号整数数据从 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/

相关文章:

c - 填充有什么好处?

c - 长文件路径的 stat 替代方案

c++ - 如果我在关闭套接字之前不发送 IP_DROP_MEMBERSHIP 会怎样?

C++、UDP、sendto需要延迟才能工作

拆分字符串并解压缩为变量的 Pythonic 方法?

python - 有 "enhanced"numpy/scipy dot 方法吗?

python - 从一系列 Pandas 间隔中提取左右限制

python - 按完整路径导入具有相似内部模块名称的 python 包

c# - Environment.SetEnvironmentVariable 未设置任何值

ruby - 如何在 ruby​​ 中创建非阻塞 TCP 服务器和 TCP 套接字,只有以下更改才会有所不同?