0

我有一串十进制数字,例如:

965854242113548732659745896523654789653244879653245794444524
length : 60 character 

我想将它发送到一个函数,但首先我想尽可能地减少它的长度。我怎样才能做到这一点?

我考虑将其转换为 base-34,即1RG7EEWTN7NW60EWIWMASEWWMEOSWC2SS8482WQE. 即 40 个字符的长度。我可以通过某种方式减少它吗?

4

1 回答 1

1

您的数字适合 70 位 - 对于如此小的有效负载压缩似乎是荒谬的。假设服务器 API 支持任意二进制数据,我只需将值编码为二进制并在其前面加上所需的字节数。

  • 1 字节长度信息 - 对于 854657986453156789675,您最初给出的示例,这将是 9
  • 9字节的二进制有效载荷

→ 为您的示例传输了 10 个字节的数据。

您的十六进制示例:

09 2e 54 c3 1e 81 cf 05 fd ab

使用以字节为单位的长度,这当然只支持长度为 255 字节的小数,但我想这已经足够了。如果您的传输协议具有内置的数据包长度概念,您甚至可以跳过初始长度字节。

重要提示:确保所有边使用相同的字节序。当您通过网络传输数据时,网络字节顺序(大端)将是自然的。

如果您想传输非常大的数字,请记住您可以对数据的二进制表示使用任何您喜欢的压缩算法。但是,您的有效负载必须大得多才能使压缩可行 - 例如,由于 zLib 数据结构的开销,对上述 9 字节有效负载使用 zLib 压缩会导致 18 字节有效负载。

如果(且仅当)您不能对有效负载使用任意字节,则可以对数据进行编码(可能在压缩之后)。大多数现代库都内置了对Base64的支持,因此这将是表示数据的一种自然方式。

于 2012-08-17T09:04:02.673 回答