获取大整数的字符串表示形式并将其转换为Java中的字节数组

时间:2011-11-07 00:55:35

标签: java bytearray endianness bitcoin

基本上,我的问题是双重的,并且特别指的是比特币RPC。我正在用Java编写一个用于Litecoin(BTC的衍生产品)的矿工,并且需要采用看起来像这样的字符串:

000000000000000000000000000000000000000000000000000000ffff0f0000

将其转换为

00000fffff000000000000000000000000000000000000000000000000000000

(我认为这是从小端到大端的转换)

然后我需要将该字符串转换为字节数组 -

我查看了org.apache,String.toByte()中的Hex类,以及一段看起来像的代码:

public static byte[] toByta(char[] data) {
    if (data == null) return null;
    // ----------
    byte[] byts = new byte[data.length * 2];
    for (int i = 0; i < data.length; i++)
        System.arraycopy(toByta(data[i]), 0, byts, i * 2, 2);
    return byts;
}

基本上:用Java来改变字节顺序的最佳方法是什么?获取数字的字符串表示并将其转换为要散列的字节数组的最佳方法是什么?

编辑:更改结束后我得到了错误的结果。

1 个答案:

答案 0 :(得分:2)

  1. Integer和BigInteger都有toString方法取基数,所以 你可以得到十六进制字符串。
  2. 您可以从中创建一个StringBuffer 字符串和调用reverse()。
  3. 然后使用转换回String toString(),然后通过getBytes();
  4. 获取字节

    不知道这是否“最好”,但你需要的工作很少。

    如果您需要更好的速度,请在原始错误方向的十六进制字符串上调用getBytes()(从步骤1开始),并使用for循环将其反转。 e.g。

    for (int i=0; i<bytes.length/2; i++) {
       byte temp = bytes[i];
       bytes[i] = bytes[bytes.length - i];
       bytes[bytes.length - i] = temp;
    }