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

时间:2016-09-08 03:24:05

标签: 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.ReadKey();

这显示当使用UTF8进行编码时,29个字符串会导致29个字节...我需要29个字符串,导致11个字节或更少..这可能吗?我以为我可能有某种查找或二进制映射算法但我不知道如何在C#中解决这个问题。

修改

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

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

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

我可以访问所有的起源和目的地......创建一个键值存储是否需要付费才能将密钥作为"来源,例如usmia"并且该值是一个特定的字节..我猜这意味着我只能拥有256个不同的Origin和Dests然后只需要将最后14个字符作为整数?

1 个答案:

答案 0 :(得分:0)

15 lg(26)+ 14 lg(10)〜= 117位〜= 14.6字节。 (lg = log base 2)

所以即使我很乐观并且假设你的字符串总是 15个小写字母后跟14个数字,它仍然需要至少15个字节才能表示。

除非有更多限制,例如只允许使用小写字母a,c,i,k,l,m,n,s,u和z,否则,您无法将其编入11个字节。哎呀,等等,甚至不是。即使这样也需要12个多字节。