【问题标题】:Decoding hex to coordinate解码十六进制以协调
【发布时间】:2018-02-07 01:50:51
【问题描述】:

我有一个十六进制有效载荷:

872fa5596122f23e24efb4fc1013b7000000000718

lat 和 lng 采用 little endian 格式,位于以下位置:

lng - binary[20:28]
lat - binary[28:32]

我不确定如何获得正确的结果。我想首先我必须将十六进制更改为小端?然后将其转换为 int?我试过这个:

data = struct.unpack('<ll',binary[12:20])

输出:

TypeError: a bytes-like object is required, not 'str'

【问题讨论】:

  • 先尝试对二进制文件进行编码:struct.unpack('&lt;ll', binary.encode()[12:20])。您使用的是 Python 3,其中字符串!= 字节。
  • 啊,我明白了,适用于 python 2.7
  • 我的逻辑是否正确?先解压再转二进制?
  • 不,首先将字符串转换为字节(从"872fa5596122f23e24efb4fc1013b7000000000718"b"872fa5596122f23e24efb4fc1013b7000000000718"),然后将其解包。
  • 你会如何解压它,有什么参数?

标签: python hex endianness


【解决方案1】:

您首先需要将十六进制表示转换为字节对象:

import codecs

binary = "872fa5596122f23e24efb4fc1013b7000000000718"
binary_bytes = codecs.decode(binary, 'hex')
print(binary_bytes)
# b'\x87/\xa5Ya"\xf2>$...

然后您可以使用struct 解码为整数或其他:

import struct
# Guessed the offsets...
lng, lat = struct.unpack('<ll', binary_bytes[0:4] + binary_bytes[20:24])
print((lng, lat))
# (15003997831, 1056055905)

【讨论】:

    猜你喜欢
    • 2020-11-11
    • 1970-01-01
    • 2015-12-23
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2018-08-21
    • 1970-01-01
    相关资源
    最近更新 更多