12

5文字の文字列があり、それらの5文字を​​ASCIIでエンコードされた(印刷可能な)数値として使用したいと思います。これを実現する最も簡単な方法は、

Long.toString(number, Character.MAX_RADIX);

"0"これにより、からまでの数字が表示され"zzzzz"ます。残念ながらLong.toString(int, int)、大文字のみをサポートし、大文字はサポートしていません。これは、最大基数が36であり、エンコードできる最大数がであることを意味し36^5 - 1 = 60 466 175ます。小文字と大文字の両方を使用できる場合、最大基数はになり、エンコード可能な最大62数は62^5 - 1 = 916 132 831です。

のソースコードをコピーしLongて可能な数字を拡張する以外に、最初にこれがすでに実装されている場所を調べる必要がありますか?

4

2 に答える 2

4

英数字を超えて2文字を使用する場合は、 Base64エンコーディングを使用できます。

Apache Commons Codecを使用Base64すると、次のような1073741824の可能な値を取得できます。

byte bytes[] = new byte[4];
bytes[0] = (byte) ((value >> 24) & 0xFF);
bytes[1] = (byte) ((value >> 16) & 0xFF);
bytes[2] = (byte) ((value >> 8) & 0xFF);
bytes[3] = (byte) (value & 0xFF);
String encoded = Base64.encodeBase64String(bytes).substring(1, 6);
于 2011-04-27T11:47:49.180 に答える
3

文字を印刷可能なASCIIにする必要があるかどうかは指定しません。

  • もしそうなら、あなたはに行くことができます95^5。スペース(SP)からチルダ(〜)までの95の印刷可能なASCII文字があります。

  • そうでない場合は、128^5==に移動できます2^35

いずれにせよ、変換を行うためのアルゴリズムは単純であり、への拡張よりも単純ですLong.toString(...)。(おそらく、文字桁マッピングの符号、範囲エラー、または穴について心配する必要はありません<->。これを最初からコーディングする方が簡単です。)

ただし、拡張基数の既存の実装については知りません。

于 2011-04-27T12:16:59.313 に答える