【问题标题】:Having trouble converting hex string to double无法将十六进制字符串转换为双精度
【发布时间】:2019-08-31 07:47:43
【问题描述】:

我有一个小端十六进制字符串(例如,'E61000003C9BFAE53893'),我正在尝试将其转换为双精度。我尝试了以下方法:

struct.unpack('<d', binascii.unhexlify('E61000003C9BFAE53893'))

但我不断得到

struct.error: unpack requires a buffer of 8 bytes

我检查了 binascii.unhexlify('E61000003C9BFAE53893') 的输出,它看起来是正确的:

>> print (binascii.unhexlify('E61000003C9BFAE53893'))

b'\xe6\x10\x00\x00<\x9b\xfa\xe58\x93'

所以我不确定是什么问题。

在某些情况下,我有一堆编码为 WKB 的坐标数据,但 geopandas 仅支持 WKT。我认为编写一个将一个转换为另一个(或 WKB 转换为浮点数)的函数会很容易,但事实证明它比我预期的更具挑战性。

【问题讨论】:

    标签: struct binary hex double python-3.6


    【解决方案1】:

    0xE61000003C9BFAE53893 太长而不能成为双精度。双倍是 8 个字节,那是 9...ish?如果您查看输出中的倒数第二个,它是“0xe58”。

    struct.unpack 仅接受 8 字节缓冲区,根据错误消息。

    【讨论】:

    • 原来坐标数据实际上存储为 EWKB,而不仅仅是 WKB,所以它包含 4 个字节的 SRID(空间参考系统 ID)。这就解释了为什么我认为我正在处理两个 10 字节的浮点数,而我实际上是在处理两个 8 字节的浮点数和 4 个字节的 SRID 数据。
    猜你喜欢
    • 2014-05-05
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多