длинные цифры до base64 символов - PullRequest
0 голосов
/ 11 января 2011

Я работаю над небольшой задачей, которая требует некоторой кодировки base64. Я пытаюсь сделать это в голове, но теряюсь.

У меня есть 13-значный номер в длинном формате Java, скажем: 1294705313608, 1294705313594, 1294705313573

Я делаю некоторую обработку с ним, в основном, я беру это число, добавляю его с вещами, помещаю его в байтовый массив и затем конвертирую в base64, используя:

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

Теперь я знаю, что для моего оригинального номера первые 3 цифры никогда не изменятся. Таким образом, 129 является постоянным в приведенных выше числах. Я хочу узнать, сколько символов, соответствующих этим цифрам, не изменилось бы в результирующей строке base64.

Код для сериализации в длину в байтовый массив. Я игнорирую первые 2 байта, так как они всегда 0:

bArray [0] = (byte) (время >>> 40);
bArray [1] = (byte) (время >>> 32);
bArray [2] = (byte) (время >>> 24);
bArray [3] = (byte) (время >>> 16);
bArray [4] = (byte) (время >>> 8);
bArray [5] = (byte) (время >>> 0);

Спасибо.

Примечания: Я знаю, что base64 будет занимать 6 битов и сделает из него один символ. Так что, если первые 3 цифры не меняются в течение долгого времени, сколько символов не изменится в base64. Это НЕ в задании HW, но я не очень знаком с кодировкой.

Ответы [ 2 ]

1 голос
/ 11 января 2011

1290000000000 - это 10010110001011001111111011110010000000000 в двоичном формате.
1299999999999 - это 10010111010101110000010011100011111111111 в двоичном формате.

Оба имеют длину 41 бит и отличаются после первых 7 бит.Ваш сдвиг помещает биты 41-48 в первый байт, который всегда будет 00000001.Следующий байт всегда будет 00101110, 00101101 или 00101110.Таким образом, у вас есть первые 14 бит общего во всех возможных значениях массива, что (при 6 битах на кодированный символ base64) означает 2 общих символа в кодированной строке.

0 голосов
/ 30 мая 2016

Похоже, вы на правильном пути. Я думаю, что вы хотите сделать, это преобразовать long в байтовый массив, а затем конвертировать байтовый массив в Base64.

Как преобразовать Long в байты [] и обратно в Java показывает, как преобразовать его в байты.

...