首页 > 解决方案 > 大端十六进制数对话

问题描述

我有以下 4 个字节的十六进制字符串(38 01 02 00),预期的输出是(201.38)十进制,就像第一个输入相反。如果给出 ( 89 00 00 00 ),那么预期结果将是 ( 0.89 )

我不知道这次对话的数学名称。

  1. 我尝试将 Big-endian 转换为 little-endian,但结果以 (00020138) 失败。
  2. 我试过写一个简单的方法,但结果仍然是错误的(1492992770)
int htonl(final int value) {
        return ByteBuffer
                .allocate(4)
                .putInt(value).order(ByteOrder.nativeOrder())
                .getInt(0);
}

标签: javamathhex

解决方案


它似乎是 BCD 编码(Binary Coded Decimal),其中每个 4 字节组代表一个小数位。

并且字节顺序是小端 - 它从最低有效字节开始。

我所看到的都表明小数点位于固定位置,但这只是一个猜测。

所以,你第一次尝试的结果很接近。只需将其除以 100,就完成了。


推荐阅读