gpt4 book ai didi

ruby - 如何使用 ruby​​ 将十六进制转换为 uint8_t

转载 作者:数据小太阳 更新时间:2023-10-29 07:17:31 25 4
gpt4 key购买 nike

我有一个字符串

6e6de179a94a4b406efab31f29d216c0e2ff0000

我被告知定义为 uint8_t 并解包为纬度 [8]、经度 [8] 和高度 [4]。

我认为这个十六进制应该解码为 54.58335 -5.70542 -15

我如何使用 Ruby 解码这样的字符串?

最佳答案

有趣的问题:)

该字符串的长度为 40 个十六进制字符,因此它代表 20 个字节。

查看您的链接,纬度为 8 个字节,经度为 8 个字节,高度为 4 个字节。老实说,我只是尝试了 packunpack 的不同参数,直到它看起来像所需的 float :

hex = "6e6de179a94a4b406efab31f29d216c0e2ff0000"

lat_hex, lon_hex, alt_hex = hex[0,16], hex[16, 16], hex[32, 8]
lat_int, lon_int, alt_int = lat_hex.to_i(16), lon_hex.to_i(16), alt_hex.to_i(16)
p [lat_int].pack('q>').unpack('D').first
# 54.583297
p [lon_int].pack('q>').unpack('D').first
# -5.705235

这里有一个更短的方法:

hex.scan(/../).map{ |x| x.hex }.pack('C*').unpack('DDL')
# => [54.583297, -5.705235, 65506]

我不确定海拔高度。由于它以整数形式存储,因此稍后可能会使用一些线性函数对其进行修改,以适应 GPS 精度和通常的高度范围。

关于ruby - 如何使用 ruby​​ 将十六进制转换为 uint8_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43812197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com