我正在处理一项需要一些base64编码的小任务。我试图在头脑中做但却迷路了。
我有一个13位数的java长格式说:1294705313608,1294705313594,1294705313573
我用它做了一些处理,基本上我把这个数字附加到它的东西把它放在一个字节数组中然后使用它转换为base64:
String b64String = new sun.misc.BASE64Encoder().encodeBuffer(bArray);
现在,我知道对于我的原始号码,前3位数字永远不会改变。所以129在上面的数字中是常数。我想找出与这些数字相对应的多少个字符在结果base64字符串中不会改变。
将long序列化为字节数组的代码。我忽略前2个字节,因为它们总是0:
bArray [0] =(字节)(时间>>> 40);
bArray [1] =(字节)(时间>>> 32);
bArray [2] =(字节)(时间>>> 24);
bArray [3] =(字节)(时间>>> 16);
bArray [4] =(字节)(时间>>> 8);
bArray [5] =(字节)(时间>>> 0);
感谢。
注意: 我知道base64会占用6位并从中生成一个字符。因此,如果前3位数字长度不变,那么在base64中多少个字符不会改变。 这不是硬件分配,但我对编码不是很熟悉。
答案 0 :(得分:1)
1290000000000是二进制的10010110001011001111111011110010000000000
1299999999999是二进制的10010111010101110000010011100011111111111
。
两者都是41位长,并且在前7位后它们不同。您的移位将第41-48位放在第一个字节中,该字节始终为00000001
。以下字节始终为00101110
,00101101
或00101110
。因此,您可以在所有可能的数组值中共享前14位,其中(每个编码的base64字符为6位)表示编码字符串中共有2个字符。
答案 1 :(得分:0)
看来你走在正确的轨道上。我想你想要做的是将long转换为字节数组,然后将字节数组转换为Base64。
How do I convert Long to byte[] and back in java向您展示如何将其转换为字节。