2011-01-11 13 views
0

私はいくつかのbase64エンコーディングを必要とする小さな仕事に取り組んでいます。私は頭でそれをやろうとしていますが、迷子になっています。 数字が長いからbase64文字

私はJavaの長い形式の13桁の番号を持っていると言う:1294705313608、1294705313594、1294705313573

は、私はそれにいくつかの処理を行い、bascially私はもので、それを追加し、この番号を取るバイト配列に入れ、その後に変換します

String b64String = new sun.misc.BASE64Encoder().encodeBuffer(bArray); 

ここで、元の番号の最初の3桁は決して変更されません。したがって、129は上記の数で一定です。私はそれらの数字に対応する文字数が結果のbase64文字列で変更されないことを確認したい。

バイト配列に長時間シリアル化するコード。最初の2バイトは常に0なので無視します。

bArray [0] =(byte)(time >>> 40);
bArray [1] =(バイト)(時刻>>> 32);
bArray [2] =(byte)(時刻>>> 24);
bArray [3] =(バイト)(時刻>>> 16);
bArray [4] =(バイト)(時刻>>> 8);
bArray [5] =(バイト)(時刻>>> 0);

ありがとうございました。

メモ: 私はbase64が6ビットをとり、1文字を作成することを知っています。したがって、最初の3桁の数字が変更されない場合、元の64文字には何文字も変更されません。 これはHW割り当てではありませんが、私はエンコーディングに詳しくはありません。

+0

これは宿題だと思うが、それほどタグ付けされていない。 –

+0

他の "stuff"と一緒にバイト配列にlongを直列化するために使用するコードを投稿できますか? – dkarp

+0

@dkarp:コードを掲載しました。 – codeObserver

答えて

1

1290000000000は、バイナリで10010110001011001111111011110010000000000です。
1299999999999は、バイナリで10010111010101110000010011100011111111111です。

両方とも41ビット長で、最初の7ビットの後では異なります。あなたのシフトはビット41-48を最初のバイトに配置します。これは常に00000001になります。次のバイトは常に00101110,00101101または00101110です。したがって、可能なすべての配列値に渡って先頭の14ビットが共通しています。エンコードされた文字列では、(エンコードされたbase64 charあたり6ビットで)2文字が共通であることを意味します。

+1

正直なところ、これはコードやテストが説明するよりも簡単です。 – dkarp

+0

Thnx dkarpp、 "最初の7ビット"あなたの可能なすべての配列値の間に共通の先頭14ビットを持っています "... 7ビットは3桁の数字を作ることができ、したがって私は最初の3桁が長く変わっていないことを理解することができます.... 1つのbase64charだけです。したがって、1つのcharは変更してはいけませんか?あなたは14ビットをどのように導いたのですか? 。 thnx again ..私はそれをプログラムし、あなたが見ることができるように、タイムスタンプ.. – codeObserver

+0

ですので、2つの異なる時間に私はこれらの数字を得ました。実際のバイト配列を追加した後では、その長さは無視されます。 – codeObserver

0

あなたが正しい軌道に乗っているように見えます。あなたがしたいことは、バイト配列をlong型に変換してから、バイト配列をBase64に変換することだと思います。

How do I convert Long to byte[] and back in javaには、バイトに変換する方法が示されています。

関連する問題