Big Endian 十六进制数对话
Big Endian Hex Number conversation
我有以下 4 个字节的十六进制字符串 (38 01 02 00),预期输出是 (201.38) 十进制,就像第一个输入被反转一样。
如果给出 (89 00 00 00) 那么预期结果将是 (0.89)
我不知道这个对话的数学名称。
- 我试过将大端转换为小端,但结果失败了 (00020138)。
- 我尝试写了一个简单的方法,结果还是错误(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 的帮助下解决了这个问题
- 我先反转了十六进制输入
- 将输出除以 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);
- 给定的输入是 89000000,结果是预期的 0.89。
我有以下 4 个字节的十六进制字符串 (38 01 02 00),预期输出是 (201.38) 十进制,就像第一个输入被反转一样。 如果给出 (89 00 00 00) 那么预期结果将是 (0.89)
我不知道这个对话的数学名称。
- 我试过将大端转换为小端,但结果失败了 (00020138)。
- 我尝试写了一个简单的方法,结果还是错误(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 的帮助下解决了这个问题
- 我先反转了十六进制输入
- 将输出除以 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);
- 给定的输入是 89000000,结果是预期的 0.89。