2011-01-11 65 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个字符。