减少十进制变量的长度(算法)

时间:2012-08-17 08:38:57

标签: decimal

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

965854242113548732659745896523654789653244879653245794444524
length : 60 character 

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

您的十六进制示例:

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

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

重要事项:确保所有方使用相同的字节顺序。当您通过网络传输数据时,网络字节顺序(big endian)是很自然的。

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

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