Ваш номер подходит для 70 бит - для такого небольшого сжатия полезной нагрузки кажется бессмысленным. Предполагая, что API-интерфейс сервера поддерживает произвольные двоичные данные, я просто кодирую значение в двоичном формате и префикс его с количеством необходимых байтов.
- 1 байт информации о длине - для 854657986453156789675, пример вы дали на начальном этапе, это будет 9
- 9 байт двоичных полезной нагрузки
→ 10 байтов данных, передаваемых на вашем примере.
Вашего пример в шестнадцатеричном:
При длине заданной в байтах, это, конечно, поддерживает только десятичные знаки до 255 байт длины, но я предполагаю, что это достаточно. Если ваш транспортный протокол имеет встроенную концепцию длины пакета, вы даже можете пропустить байт начальной длины.
Важно: убедитесь, что все стороны используют одинаковую консистенцию. Когда вы передаете свои данные по сети, порядок сетевых байтов (big endian) будет естественным.
Если вы хотите передавать очень большие цифры, имейте в виду, что вы можете использовать любой алгоритм сжатия, который вам нравится в двоичном представлении ваших данных. Однако ваша полезная нагрузка должна быть значительно больше, чтобы сделать сжатие возможным - например, с использованием сжатия zLib для приведенных выше результатов полезной нагрузки в 9 байт в 18-байтной полезной нагрузке из-за накладных расходов для datastructures zLib.
Если (и только если) вы не можете использовать произвольные байты для своей полезной нагрузки, вы можете кодировать свои данные (возможно, после сжатия). Большинство современных библиотек построили поддержку для Base64, так что это будет естественный способ представления данных.
Вы можете отправить его в полностью двоичной форме. –