gpt4 book ai didi

c# - 如何快速编码然后压缩包含 C# 中数字的短字符串

转载 作者:太空狗 更新时间:2023-10-29 21:14:34 24 4
gpt4 key购买 nike

我有这样的字符串:

000101456890
348324000433
888000033380

它们都是长度相同的字符串,并且只包含数字。

我想找到一种方法来编码然后压缩(减少长度)字符串。压缩算法只需要压缩成 ASCII 字符,因为这些字符将用作网页链接。

例如:

www.stackoverflow.com/000101456890  goes to www.stackoverflow.com/aJks

有什么方法可以做到这一点,一些可以快速完成压缩工作的方法。

谢谢,

最佳答案

为了简单,您可以将每个都视为long(那里有足够的空间)和十六进制编码;这给你:

60c1bfa
5119ba72b1
cec0ed3264

base-64 会更短,但您需要将其视为大端(注意大多数 .NET 是小端)并忽略前导 0 字节。这给你:

Bgwb+g==
URm6crE=
zsDtMmQ=

例如:

    static void Main()
{
long x = 000101456890L, y = 348324000433L, z = 888000033380L;

Console.WriteLine(Convert.ToString(x, 16));
Console.WriteLine(Convert.ToString(y, 16));
Console.WriteLine(Convert.ToString(y, 16));

Console.WriteLine(Pack(x));
Console.WriteLine(Pack(y));
Console.WriteLine(Pack(z));

Console.WriteLine(Convert.ToInt64("60c1bfa", 16).ToString().PadLeft(12, '0'));
Console.WriteLine(Convert.ToInt64("5119ba72b1", 16).ToString().PadLeft(12, '0'));
Console.WriteLine(Convert.ToInt64("cec0ed3264", 16).ToString().PadLeft(12, '0'));

Console.WriteLine(Unpack("Bgwb+g==").ToString().PadLeft(12, '0'));
Console.WriteLine(Unpack("URm6crE=").ToString().PadLeft(12, '0'));
Console.WriteLine(Unpack("zsDtMmQ=").ToString().PadLeft(12, '0'));

}
static string Pack(long value)
{
ulong a = (ulong)value; // make shift easy
List<byte> bytes = new List<byte>(8);
while (a != 0)
{
bytes.Add((byte)a);
a >>= 8;
}
bytes.Reverse();
var chunk = bytes.ToArray();
return Convert.ToBase64String(chunk);
}
static long Unpack(string value)
{
var chunk = Convert.FromBase64String(value);
ulong a = 0;
for (int i = 0; i < chunk.Length; i++)
{
a <<= 8;
a |= chunk[i];
}
return (long)a;
}

关于c# - 如何快速编码然后压缩包含 C# 中数字的短字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6356306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com