是否有可能以二进制格式获取字符串,整数等?我的意思是假设我有字符串:
“Hello”,我想以二进制格式存储它,所以假设“Hello”是
11110000110011001111111100000000二进制(我不知道,我只是快速输入内容)。
我可以将上述二进制文件存储为不是字符串,而是以实际格式存储位。
除此之外,实际上可以存储少于8位。我得到的是,如果字母A是文本中使用的最常用的字母,我可以使用1位来存储它而不是构建二进制树。
答案 0 :(得分:3)
是否有可能得到字符串,整数, 等二进制格式?
是。有几种不同的方法可以做到这一点。一种常见的方法是从一个字节数组中创建一个MemoryStream,然后在该内存流之上创建一个BinaryWriter,然后将ints,bools,chars,strings等写入BinaryWriter。这将使用表示您编写的数据的字节填充数组。还有其他方法可以做到这一点。
我可以将上述二进制文件存储为不是字符串,而是以实际格式存储位。
当然,您可以存储一个字节数组。
实际上可以存储少于8位。
没有。 C#中最小的存储单位是一个字节。但是,有些类可以让您将字节数组视为位数组。您应该阅读BitArray类。
答案 1 :(得分:2)
你会假设什么编码?
答案 2 :(得分:2)
我得到的是这封信 A是最常用的字母 一个文本,我可以使用1位来存储它 关于压缩而不是 建立二叉树。
您描述的算法称为Huffman coding。为了与您的示例相关,如果数据中经常出现“A”,则算法将“A”简单地表示为1.如果“B”也经常出现(但频率低于A),则算法通常表示'B' '为01.然后,其余的字符将是00xxxxx ......等。
从本质上讲,算法会对数据执行统计分析,并生成一个能够为您提供最大压缩的代码。
答案 3 :(得分:2)
您正在寻找的是类似Huffman coding的内容,它用于表示具有较短位模式的更常见值。
如何存储位代码仍限于整个字节。没有使用少于一个字节的数据类型。存储可变宽度位值的方法是在字节数组中端到端地打包它们。这样你就有了一个比特值流,但这也意味着你只能从头到尾读取流,没有像字节数组中的字节值那样随机访问这些值。
答案 4 :(得分:1)
您可以使用以下内容:
Convert.ToBytes(1);
ASCII.GetBytes("text");
Unicode.GetBytes("text");
一旦你有了字节,就可以完成你想要的所有工作。在我们为您提供更多有用信息之前,您需要某种算法。
答案 5 :(得分:0)
字符串 实际上以二进制格式存储,与所有字符串一样。
字符串与另一种数据类型的区别在于,当程序显示字符串时,它会检索二进制文件并显示相应的(ASCII)字符。
如果要以压缩格式存储数据,则需要为每个字符分配超过1位。你怎么认识哪个字符是经常出现的?
如果1表示'A',0表示什么? 所有其他角色?