2012-08-17 5 views
0

У меня есть строка из десятичных цифр, как:уменьшить длину десятичной переменной (алгоритм)

965854242113548732659745896523654789653244879653245794444524 
length : 60 character 

Я хочу, чтобы отправить его в функцию, но сначала я хочу уменьшить длину его как можно больше. Как я могу это сделать?

Я думаю о преобразовании его в базу-34, что будет 1RG7EEWTN7NW60EWIWMASEWWMEOSWC2SS8482WQE. Это 40 символов. Могу ли я уменьшить его каким-то образом?

+2

Вы можете отправить его в полностью двоичной форме. –

ответ

1

Ваш номер подходит для 70 бит - для такого небольшого сжатия полезной нагрузки кажется бессмысленным. Предполагая, что API-интерфейс сервера поддерживает произвольные двоичные данные, я просто кодирую значение в двоичном формате и префикс его с количеством необходимых байтов.

  • 1 байт информации о длине - для 854657986453156789675, пример вы дали на начальном этапе, это будет 9
  • 9 байт двоичных полезной нагрузки

→ 10 байтов данных, передаваемых на вашем примере.

Вашего пример в шестнадцатеричном:

При длине заданной в байтах, это, конечно, поддерживает только десятичные знаки до 255 байт длины, но я предполагаю, что это достаточно. Если ваш транспортный протокол имеет встроенную концепцию длины пакета, вы даже можете пропустить байт начальной длины.

Важно: убедитесь, что все стороны используют одинаковую консистенцию. Когда вы передаете свои данные по сети, порядок сетевых байтов (big endian) будет естественным.

Если вы хотите передавать очень большие цифры, имейте в виду, что вы можете использовать любой алгоритм сжатия, который вам нравится в двоичном представлении ваших данных. Однако ваша полезная нагрузка должна быть значительно больше, чтобы сделать сжатие возможным - например, с использованием сжатия zLib для приведенных выше результатов полезной нагрузки в 9 байт в 18-байтной полезной нагрузке из-за накладных расходов для datastructures zLib.

Если (и только если) вы не можете использовать произвольные байты для своей полезной нагрузки, вы можете кодировать свои данные (возможно, после сжатия). Большинство современных библиотек построили поддержку для Base64, так что это будет естественный способ представления данных.

+0

Я просто добавляю образец десятичного числа, мой десятичный знак на самом деле похож на: 96585424211354873265974589652365478965324487965324579444452424, который имеет длину 60 символов – hamze

+0

i Запишите вопрос – hamze

+0

@hamze для нового примера, вы получите 26 байт, если вы используете байт длины: '19 99 de 94 cd 69 f7 bc c0 bd 6f a8 85 3f bd c3 7a d5 71 10 72 86 77 88 e4 ec' –

Смежные вопросы