在读完之后,对整个大端,小端的事情感到很困惑。假设我的Hex值为......
AA 37 D6 08 DF BF CB 01
我希望将其转换为...
01 CB BF DF 08 D6 37 AA
(哪个是大端?)我如何用Java做到这一点?一旦完成,我需要将其转换为十进制。对不起,如果这是直截了当的,我很新,因为我的头从它旋转哈哈。感谢您提前提供任何帮助!
答案 0 :(得分:0)
请记住,这有时会在hexSwap中修剪您需要修剪的额外00。
import java.math.BigInteger;
public class Simon {
public static String hexSwap(String origHex) {
// make a number from the hex
BigInteger orig = new BigInteger(origHex,16);
// get the bytes to swap
byte[] origBytes = orig.toByteArray();
int i = 0;
while(origBytes[i] == 0) i++;
// swap the bytes
byte[] swapBytes = new byte[origBytes.length];
for(/**/; i < origBytes.length; i++) {
swapBytes[i] = origBytes[origBytes.length - i - 1];
}
BigInteger swap = new BigInteger(swapBytes);
return swap.toString(10);
}
public static void main(String[] args) {
String orig = "AA37D608DFBFCB01";
String swap = hexSwap(orig);
System.out.println(swap);
}
}
答案 1 :(得分:0)
作为参考,只看一堆字节不会告诉你一个数字是小端还是大端(除非你碰巧知道它们代表的数字)。你必须首先关心的原因是,相同的字节代表两个不同的数字,这取决于字节应该被解释为little-endian还是big-endian。
既然如此,如果你知道字节代表一个小端数,并且你想把它解释为Java long
,你可以使用一些代码,如:
long result = 0;
for (int i = 0; i < 8; ++i)
{
result |= (bytes[i] & 0xffL) << (8 * i);
}
完成后,如果需要,可以使用Long.toString(result, 16)
将结果显示为十六进制数字。
答案 2 :(得分:0)
如下所述,您可以使用ByteBuffer
将值解释为大端或小端数量。有一个相关的例子here。为方便起见,请注意double
的{{1}}构造函数将一个double转换为BigDecimal
,这是double的二进制浮点值的精确十进制表示。“
控制台:
400921fb54442d18 = 3.141592653589793 182d4454fb210940 = 3.207375630676366E-192 3.141592653589793 = 3.141592653589793115997963468544185161590576171875
代码:
BigDecimal