【发布时间】:2021-04-01 20:21:18
【问题描述】:
我收到一个 4 字节十六进制字符串的经度和精度:99054840
我正在尝试从此值中提取经度。
规格告诉我以下内容:
-
位 [28:0]:有符号值 λ,小端格式,经度° = λ ÷ 1,000,000
-
位 [31:29]:无符号值 α,范围 0-7,精度度量
我的设备实际位于经度 4.7199。所以我现在转换的结果应该是什么。
读取我当前所做的经度值(结果不正确):
def get_longitude(reading):
# split in different bytes
n=2
all_bytes = [reading[i:i+n] for i in range(0, len(reading), n)]
# convert to binary
long_bytes_binary = list(map(hex_to_binary, all_bytes))
# drop the accuracy bits
long_bytes_binary[3] = long_bytes_binary[3][0:5]
# little endian & concatenate bytes
longitude_binary = ''.join(list(reversed(long_bytes_binary)))
# get longitude
lon = binary_to_decimal(int(longitude_binary))/1_000_000
达到 138.93。与4.7199完全不同(预期结果)
这里是辅助方法
def hex_to_binary(payload):
scale = 16
num_of_bits = 8
binary_payload = bin(int(payload, scale))[2:].zfill(num_of_bits)
return binary_payload
def binary_to_decimal(binary):
binary1 = binary
decimal, i, n = 0, 0, 0
while(binary != 0):
dec = binary % 10
decimal = decimal + dec * pow(2, i)
binary = binary//10
i += 1
return decimal
我做错了什么?如何正确读取值? 还是我的设备坏了:)
【问题讨论】: