是否有可能以二进制格式获取字符串,整数等?我的意思是,假设我有字符串:以二进制表示形式获取字符串,int等?
“你好”,我想它以二进制格式存储,所以假设“你好”是
二进制11110000110011001111111100000000(我知道这不,我刚刚输入某事很快)。
我可以将上面的二进制文件而不是作为一个字符串,但与位的实际格式。
除此之外,它实际上可以存储少于8位。我得到的是如果字母A是文本中使用的最频繁的字母,我可以使用1位来存储它与压缩有关的信息,而不是构建二叉树。
是否有可能以二进制格式获取字符串,整数等?我的意思是,假设我有字符串:以二进制表示形式获取字符串,int等?
“你好”,我想它以二进制格式存储,所以假设“你好”是
二进制11110000110011001111111100000000(我知道这不,我刚刚输入某事很快)。
我可以将上面的二进制文件而不是作为一个字符串,但与位的实际格式。
除此之外,它实际上可以存储少于8位。我得到的是如果字母A是文本中使用的最频繁的字母,我可以使用1位来存储它与压缩有关的信息,而不是构建二叉树。
是否有可能以二进制格式获得字符串,整数, 等?
是的。有几种不同的方法可以做到这一点。一种常用的方法是将MemoryStream从字节数组中取出,然后在该内存流的顶部创建一个BinaryWriter,然后将ints,bools,chars,strings等等写入BinaryWriter。这将填充表示您写入的数据的字节。还有其他方法可以做到这一点。
我可以将上述二进制不是作为字符串存储,而是以实际格式存储在比特中。
当然,你可以存储一个字节数组。
它实际上可以存储少于8位。
否。C#中最小的存储单元是一个字节。但是,有些类会让您将一组字节视为一组数据。您应该阅读有关BitArray类。
谢谢,我会查看你的建议。 – Xaisoft 2009-10-02 05:15:07
你会假设什么编码?
这应该真的是一个评论 – 2009-10-01 21:06:51
同意,没有代表但是;) – gn22 2009-10-01 21:07:41
在那里,现在你做。 :P – 2009-10-01 21:30:03
你可以使用之类的东西:
Convert.ToBytes(1);
ASCII.GetBytes("text");
Unicode.GetBytes("text");
一旦你的字节,你可以做所有的位摆弄你想要的。在我们可以给你更多有用的信息之前,你需要一种算法。
我正在逐渐是,如果字母 A是 使用文本最频繁的信,我可以用1位来存储它 至于压缩,而不是 建立二叉树。
您正在描述的算法被称为Huffman coding。与你的例子相关,如果数据中经常出现'A',那么该算法将简单地表示为'A'。如果'B'也频繁出现(但比A少),该算法通常会表示'B' “为01.然后,其余字符将00xxxxx ...等
在本质上,该算法对数据进行统计分析,并生成代码,会给你最压缩。
我们不得不在大学里写“Huff”和“Puff”,带回回忆。 – 2009-10-01 21:32:08
所以它实际上可以存储这种表示而不必构建二叉树。 – Xaisoft 2009-10-01 21:34:13
存储表示不需要构建二叉树。但是,代码通常以*视觉形式*表示为二叉树,因为这样更容易阅读。 – 2009-10-01 21:36:56
字符串是实际存储在二进制格式,都是字符串。
字符串和另一种数据类型之间的区别是,当你的程序显示字符串时,它检索二进制和示出了相应的(ASCII)字符。
如果你将数据存储在一个压缩的格式,你将需要分配每个字符超过1位。 哪个字符是mose频繁?
如果1代表'A',0代表什么意思? 所有其他字符?
您正在寻找的是类似于Huffman coding的东西,它用于表示较短的位模式下更常见的值。
如何存储位代码仍然限于整个字节。没有使用少于一个字节的数据类型。您存储可变宽度位值的方式是将它们首尾排列在一个字节数组中。这样你就有了一系列位值,但这也意味着你只能从头到尾读取流,没有像字节数组中的字节值那样的随机访问值。
为什么downvote?如果你不说自己不喜欢什么,那是毫无意义的...... – Guffa 2009-10-01 21:23:37
一个字符串只是一个结尾有空终止符的字节流。它已经是二进制格式。尝试查找zlib进行压缩。 – 2009-10-01 21:07:56