2011-01-11 38 views
0

我正在處理一個需要一些base64編碼的小任務。我正在努力做到這一點,但會迷路。數字長到base64字符

我在java中長格式的13位數字,說:1294705313608,1294705313594,1294705313573

我做一些處理它,bascially我拿這個數字與東西追加它把它放在一個字節數組,然後轉換它以base64使用:

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

現在,我知道對於我的原始數字,前3位數字永遠不會改變。所以上面的數字是129。我想知道這些數字對應的字符數在合成的base64字符串中不會改變。

將字符串長序列化的代碼。我忽略第2個字節,因爲它們總是0:

bArray [0] =(字節)(時間>>> 40);
bArray [1] =(byte)(time >>> 32);
bArray [2] =(byte)(time >>> 24);
bArray [3] =(byte)(time >>> 16);
bArray [4] =(byte)(time >>> 8);
bArray [5] =(byte)(time >>> 0);

謝謝。

注: 我知道的base64將採取6位,使一個字符出來。所以如果前3個數字不會改變多少個字符在base64中不會改變。 這不是一個硬件分配,但我不是很熟悉編碼。

+0

我認爲這是家庭作業,但沒有標記爲這樣。 – 2011-01-11 02:53:34

+0

你可以發佈你使用的序列化長字節數組與其他「東西」的代碼嗎? – dkarp 2011-01-11 02:53:53

回答

1

1290000000000是10010110001011001111111011110010000000000二進制。
1299999999999是10010111010101110000010011100011111111111二進制。

兩者都是41位長,它們在前7位之後不同。你的移位將第41-48位放在第一個字節中,它總是00000001。以下字節將始終爲00101110,0010110100101110。因此,在所有可能的數組值中,您已經獲得了14位共同的前14位(每個編碼base64字符的位數爲6位)表示編碼字符串中共有2個字符。