C#如何对字符串进行编码以最小化字节

C#如何对字符串进行编码以最小化字节,c#,compression,bit,C#,Compression,Bit,是否有可能以某种方式对字符串进行编码以最小化字节数?基本上我需要得到29个字符到11个字节的数据 var myString = "usmiaanzaklaacn40879005900133"; byte[] bytes = Encoding.UTF8.GetBytes(myString); Console.WriteLine(bytes.Length); //Output = 29, 1 byte per character Console.Re

是否有可能以某种方式对字符串进行编码以最小化字节数?基本上我需要得到29个字符到11个字节的数据

var myString = "usmiaanzaklaacn40879005900133";
        byte[] bytes = Encoding.UTF8.GetBytes(myString);

        Console.WriteLine(bytes.Length); //Output = 29, 1 byte per character
        Console.ReadKey();
这表明当使用UTF8编码时,29个字符串将产生29个字节。。。我需要29个字符的字符串,结果是11个字节或更少。。这可能吗?我想我可能有某种查找或二进制映射算法,但我有点不确定如何在C#中实现这一点

编辑:

所以我有一个芯片,它有一个11字节的定制数据负载。我希望能够将29个字符的字符串(即唯一的)压缩为字节,将其分配给“自定义数据”,然后接收自定义数据字节,并将其解压缩回29个字符的字符串。。。现在我不知道这是否可行,但如果有任何帮助,我将不胜感激。。谢谢:)

字符串本身[usmia]-[anzakl]-[aacn40879005900]-[133]=[origin]-[dest]-[random/unique]-[weight]

好的,最后14个字符是整数

我可以访问所有的出发地和目的地。。。是否可以创建一个键值存储,将键值作为“Origin,例如usmia”,并且该值是一个特定字节。。我想这意味着我只能有256个不同的原点和dest,然后把最后14个字符变成一个整数

15lg(26)+14lg(10)~=117位~=14.6字节。(lg=对数基数2)

所以,即使我很乐观,假设字符串总是15个小写字母加上14位数字,仍然需要至少15个字节来表示


除非有更多的限制,比如只允许小写字母a、c、i、k、l、m、n、s、u和z,否则不能将其编码为11个字节。哎呀,等等,即使在那时也不行。即使这样也需要12个字节多一点。

为什么需要11个字节?因为我最多只能玩11个字节。。。因此,它可以更少,但最大值为11。您可能可以利用将要编码的合法字符的一些限制。如果你把自己限制在10位数字和26个字母(36个法定字符)以内,你可以将17个字符压缩成11个字节,但仍然比你想要的29个字节要少。现在还不清楚为什么你认为可以将其编码成11个字节。这是基本的信息理论。11字节代表88位信息。如果文本中的信息超过88位,则不可能将其减少到11字节。你能提供任何理由,使任何人都值得把这个问题作为一个可能解决的问题来研究吗?将实际数据存储在其他地方,并使用Ok谢谢。我不太确定这是否可能。是的,你是对的,它们将始终是15个小写字母,后跟14位数字。基本上是[usmia]-[anzakl]-[aacn40879005900]-[133]=[origin]-[dest]-[random]-[weight]如果usmia和anzakl是仓库或机场代码,则在交易双方使用密码缩短它们。美国迈阿密变成a,美国肯尼迪变成b,阿斯特拉利亚奥克兰变成z。使用十六进制,您可以将16个机场编码为2个字节。如果你只有特定的机场组合,你可以走得更远。了解数据是什么很重要。