以二进制表示形式获取字符串,int等?

时间:2009-10-01 21:02:09

标签: c# algorithm compression

是否有可能以二进制格式获取字符串,整数等?我的意思是假设我有字符串:

“Hello”,我想以二进制格式存储它,所以假设“Hello”是

11110000110011001111111100000000二进制(我不知道,我只是快速输入内容)。

我可以将上述二进制文件存储为不是字符串,而是以实际格式存储位。

除此之外,实际上可以存储少于8位。我得到的是,如果字母A是文本中使用的最常用的字母,我可以使用1位来存储它而不是构建二进制树。

6 个答案:

答案 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表示什么? 所有其他角色?