Big Endian 十六进制数对话

Big Endian Hex Number conversation

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

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

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

好像是BCD编码(Binary Coded Decimal),每个4字节组代表一位小数。

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

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

那么,您第一次尝试的结果就很接近了。只需除以 100,就大功告成了。

在@Ralf Kleberhoff 的帮助下解决了这个问题

  1. 我先反转了十六进制输入
  2. 将输出除以 100
public static String reverse(final String originalHex) {

        final int lengthInBytes = originalHex.length() / 2;
        final char[] chars = new char[lengthInBytes * 2];
        for (int index = 0; index < lengthInBytes; index++) {
            final int reversedIndex = lengthInBytes - 1 - index;
            chars[reversedIndex * 2] = originalHex.charAt(index * 2);
            chars[reversedIndex * 2 + 1] = originalHex.charAt(index * 2 + 1);
        }
        return new String(chars);
}
final float f = Float.parseFloat(reverse("89000000"));
System.out.println(f / 100);
  1. 给定的输入是 89000000,结果是预期的 0.89。