我有16个字符的十六进制字符串,如下所示:
B5A43BC5BDCEEFC6
2C7C27F05A488897
1514F4EC47C2EBF6
D91ED66BC999EB64
我想缩短它们并使缩短的字符串只包含大写字母。
DeflateStream和GZipStream只会增加长度。
任何人都可以帮我将这16个字符的十六进制字符串缩短为6个字符或更少?
或者,将32个字符的十六进制字符串缩短为12个字符或更少是可以的。
答案 0 :(得分:2)
除非您的16位十六进制字符输入中有一些redundancy,否则您要求的是数学不可能。您可以通过检查输入的entropy来证明这一点。
16 ^ 16 =18446744073709551616≈1.84x10^ 19个可能的值。
26 ^ 6 =308915776≈3.09x10^ 8个可能的值。
为了保证您可以代表16个十六进制字符中的每个一个,您需要 14 上(或更低)案例字母。
13个字符不够:
26 ^ 13 =2481152873203736575≈2.48x10^ 18个可能的值。
26 ^ 14 =64509974703297150976≈6.45x10^ 19个可能的值。
1626 ^ 6 =18480905552168525376≈1.849x10^ 19个可能的值。
通过相同的逻辑,将32个十六进制字符缩短为12个或更少的(或更低)上部个字符。如果没有冗余,您无法保证可以将任意16(或32)个十六进制字符缩短为6(或12)个(或更低)个字符。
答案 1 :(得分:0)
您可以将十六进制数转换为更高的基数,如sexagesimal:
Quickest way to convert a base 10 number to any base in .NET?