如何快速压缩一个短十六进制字符串,并在c#中解压缩它



我有一些16个字符的十六进制字符串,像这样:

B5A43BC5BDCEEFC6
2C7C27F05A488897
1514F4EC47C2EBF6
D91ED66BC999EB64

我想缩短它们,并且缩短后的字符串只包含大写字母。

DeflateStream和GZipStream只是增加长度。

谁可以帮助我缩短这16个字符十六进制字符串6个字符或更少?

或者,将32个字符的十六进制字符串缩短为12个或更少的字符也是可以的。

除非在16十六进制字符输入中有一些冗余,否则您所要求的在数学上是不可能的。你可以通过检查输入的熵来证明这一点。

  • 16个十六进制字符。

16^16 = 18446744073709551616≈1.84x10^19个可能值

  • 您希望字符串为6个大写(或更低-数学是相同的)大小写字符或更少。在英语中(我假设你想要英语)有26个大写字符。

26^6 = 308915776≈3.09x10^8个可能值。


  • 为了保证你可以表示每一个 16个十六进制字符,你需要14个大写(或小写)大写字母。

  • 13个字符不够:

26^13 = 2481152873203736575≈2.48x10^18个可能的值。

  • 14个字符足够了:

26^14 = 64509974703297150976≈6.45x10^19个可能值。


    6个(或更少)字符中可能做到这一点的唯一方法(假设没有冗余)是有一些基数,每个字符有1626可能的值。

1626^6 = 18480905552168525376≈1.849 × 10^19个可能值


根据同样的逻辑,将32个十六进制字符缩短为12个或更少的大写(或小写)大小写字符是不可能的。如果没有冗余,就不能保证将任意16(或32)个十六进制字符缩短为6(或12)个大写(或小写)大小写字符。

您可以将十六进制数转换为更高的进制数,如sexagesimal:

最快的方式转换一个基数10的数字到任何基础在。net ?

相关内容

  • 没有找到相关文章

最新更新