【问题标题】:Hex Encoding and Decoding十六进制编码和解码
【发布时间】:2016-10-24 08:34:45
【问题描述】:

我在一些第 3 方应用程序中有两个模块(它没有任何文档,并且由于机密性我无法透露应用程序名称)。一个模块只输出整数,其他模块只输出浮点数。

输出整数的模块具有非常简单的数据格式,因为它是反向字节顺序的数字的十六进制表示。所以,我能够成功解码它。但是在解码浮点数的十六进制表示时存在问题。

下面的数据显示了十六进制的数据转储,后跟预期的转换值。我有一些关于它的表示的信息,最后两个字节是某种 CRC,所以,它就像 8 字节数字和两个 CRC 字节。 我已经突出显示了需要转换的 8 个字节,它们的预期值如下:

数据集 1:02 B5 E6 7B 15 C8 0C 00 0A F9 = 999359.533

数据集 2:7C 4C 3A 00 00 00 00 00 B7 4C = 0.001

任何人都可以在这里提出一些建议,我也尝试了许多编码方案,包括 IEEE 格式。我没有任何其他相关信息可以分享(我知道这将是解决此问题的热门和试用技术)。

【问题讨论】:

    标签: encoding hex decoding


    【解决方案1】:

    不确定这是否有帮助,但是:

    02 B5 E6 7B 15 C8 0C 00 = 0x000CC8157BE6B502 = 3597694319113474
    
    7C 4C 3A 00 00 00 00 00 = 0x00000000003A4C7C = 3820668
    

    3597694319113474 / 3600000000 = 999359.5331

    3820668 / 3600000000 = 0.001061297

    所以在一定数量的舍入内,它们可能是 3600000000 的小数部分的定点数?

    你能得到更多的数据点吗?

    【讨论】:

    • 谢谢彼得,我已经尝试将它应用于其他数据点并且得到了正确的值。你已经反转了十六进制表示,然后计算了它的等效十进制值并除以 3600000000。你能告诉我为什么你将十进制表示除以 3600000000 吗?
    • 您提到您的整数模块以相反的顺序输出(我认为它是 little-endian)。所以我将字节转换为十进制,并注意到它们与“目标”数字大致成比例。然后我计算出比率 3597694319113474 / 999359.533 和 3820668 / 0.001。两者都接近 3600000000,所以我猜这是使用的正确因素。这有意义吗?
    • 是的,有些人可能会,有些人可能不会。因此,为了验证这一点,我目前也在其他数据点上对其进行测试。无论如何感谢彼得的方法!!!!
    • 太好了,如果有什么我可以添加的,请告诉我 - 否则,请您将其标记为答案吗?
    • 我已经接受了,再次感谢。这里有一个快速的问题:如果我需要记录这个解决方案,那么我该如何解释这个 3600000000 因子,因为这只是一个来自 ratio nothing 标准值的值?
    猜你喜欢
    • 2020-06-15
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2013-09-25
    • 2020-08-28
    • 1970-01-01
    • 2019-12-27
    • 2019-11-22
    相关资源
    最近更新 更多