1

次のコードを試しました:

import java.math.BigInteger;
import org.apache.commons.codec.binary.Base32;
import org.junit.Test;

public class Sandbox
{
  @Test
  public void testSomething() {
    String sInput = "GIYTINZUHAZTMNBX";

    BigInteger bb = new BigInteger(new Base32().decode(sInput));

    System.out.println("number = " + bb);
  }
}

出力は次のとおりです。

number = 237025977136523702055991

この Web サイトを使用して base 32 を変換すると、実際の出力とは異なる結果が得られます。私がウェブサイトから得たものに基づいて、私が期待する結果は次のとおりです。

expected output = 2147483647

なぜこれが起こっているのですか?

編集:

意図的に 2^31-1 を変換しようとして混乱を招いてしまったことをお許しください。

以前にリンクした変換 Web サイトを使用して、入力を変更しました。

String sInput = "GE4DE===";

期待される出力:

number = 182

実際の出力:

number = 3225650
4

2 に答える 2

1

あなたがしていることは正しいです... Base32文字列は、呼び出しから取得したバイト配列をBase32エンコードしたものであると仮定します BigInteger.toByteArray()

BigInteger(byte[] val)実際には、任意のバイトの配列を取りません。byte[]の表現を取りますBigInteger。また、最上位バイトが にあると仮定しますval[0])。

于 2012-06-30T00:30:39.873 に答える
0

base-32 の場合、X、Y、および Z は存在しないはずです。base-36ではないですか?

于 2012-06-30T01:44:47.070 に答える