【问题标题】:[Python]Conversion issue: Float --> Bytes and viceversa[Python]转换问题:Float --> Bytes,反之亦然
【发布时间】:2016-02-05 09:18:46
【问题描述】:

我正在努力解决我无法解决的问题。 我正在开发一个客户端 - 服务器应用程序,在 python ofc 中,我需要发送一些“浮点类型”数据,但 sock.sendto 需要发送一个“字节类型”变量。 我试过 struct.pack,我试过 numpy.array(这个让我发送整个数组,在这种情况下似乎是最好的模块)它们都可以工作,我可以以“字节类型”格式发送我需要的数据. 真正的问题是服务器端,我无法将接收到的数据(以字节为单位)转换为浮点数。 我试过这个: 1) Cast: float(data) ofc 它不起作用 2) "".join 变量,然后使用 float(data) ofc 进行转换,这也不起作用

所以我很困惑。任何想法?我真的需要阅读浮动服务器端。 谢谢

【问题讨论】:

    标签: python sockets numpy server client


    【解决方案1】:
    # sender side
    data = struct.pack('!d', 3.1415)  # float -> bytes
    
    # receiver side
    x = struct.unpack('!d', data)  # bytes -> float
    

    struct.unpack 返回一个未打包值的元组。使用x[0],您将获得第一个(仅在本例中)值,即您想要的浮点数。

    编辑:请注意,python 浮点数实际上是双精度数,因此应该这样打包。

    【讨论】:

    • 谢谢。忘记拆包了。那是完美的解决方案:D
    • 我确实使用'!d' 运行它。我已经修改了帖子。
    • @mhawke 你为什么删除你的答案?我认为除了精度问题之外,它比我的要好,因为它讨论了其他选项。
    • @kazemakase:因为这些答案是基于对双结构格式说明符的无知,因此无关紧要。尽管已被删除,该帖子仍然可见,并且可能对落入同一陷阱的其他人有价值。我希望 OP 看到了你的更新。
    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 2011-10-08
    • 2020-10-24
    • 2013-03-15
    相关资源
    最近更新 更多