Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在二进制表示中获取字符串、int等?_C#_Algorithm_Compression - Fatal编程技术网

C# 在二进制表示中获取字符串、int等?

C# 在二进制表示中获取字符串、int等?,c#,algorithm,compression,C#,Algorithm,Compression,是否可以获取二进制格式的字符串、整数等?我的意思是假设我有字符串: “Hello”我想以二进制格式存储,所以假设“Hello”是 1111000011001111111100000000的二进制文件(我不知道,我只是快速输入了一些东西) 我可以不以字符串的形式存储上述二进制文件,而是以位的实际格式存储吗 除此之外,实际上是否可以存储少于8位的数据。我想说的是,如果字母A是文本中使用频率最高的字母,我可以使用1位来存储它,而不是构建二叉树。您会采用什么编码?您可以使用以下方法: Convert.T

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

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

1111000011001111111100000000的二进制文件(我不知道,我只是快速输入了一些东西)

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


除此之外,实际上是否可以存储少于8位的数据。我想说的是,如果字母A是文本中使用频率最高的字母,我可以使用1位来存储它,而不是构建二叉树。

您会采用什么编码?

您可以使用以下方法:

Convert.ToBytes(1);
ASCII.GetBytes("text");
Unicode.GetBytes("text");
一旦你有了字节,你就可以做所有你想做的事情了。在我们给你提供更多有用的信息之前,你需要某种算法

我的意思是如果这封信 A是英语中最常用的字母 文本,我可以使用1位来存储它吗 关于压缩而不是 构建二叉树

您描述的算法称为。与您的示例相关,如果“A”经常出现在数据中,那么算法将“A”表示为1。如果“B”也经常出现(但频率低于A),则算法通常将“B”表示为01。然后,剩下的字符将是00xxxxx。。。等等


本质上,该算法对数据进行统计分析,并生成一个能给您最大压缩的代码。

字符串实际上是以二进制格式存储的,所有字符串也是如此

字符串和另一种数据类型的区别在于,当程序显示字符串时,它检索二进制并显示相应的(ASCII)字符

如果要以压缩格式存储数据,则需要为每个字符分配超过1位的数据。除此之外,您如何确定哪个角色最常见


如果1代表“A”,那么0是什么意思?所有其他字符?

您要查找的是,它用于用较短的位模式表示更常见的值

存储位代码的方式仍然限于整个字节。没有使用少于一个字节的数据类型。存储可变宽度位值的方法是将它们端到端打包到字节数组中。这样您就有了一个位值流,但这也意味着您只能从头到尾读取该流,不会像对字节数组中的字节值那样随机访问这些值

是否可以获取字符串、整数、, 二进制格式的etc

对。这样做有几种不同的方法。一种常见的方法是用字节数组生成MemoryStream,然后在该内存流上生成BinaryWriter,然后向BinaryWriter写入int、bools、char、string等等。这将用表示您编写的数据的字节填充数组。还有其他方法可以做到这一点

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

当然,您可以存储字节数组

实际上是否可以存储少于8位的数据


不是。C#中最小的存储单元是一个字节。但是,有些类允许您将字节数组视为位数组。您应该阅读有关BitArray类的内容。

这应该是一篇评论(同意,但是没有代表)字符串只是一个字节流,末尾有一个空终止符。它已经是二进制格式。尝试查找zlib以进行压缩。为什么要进行向下投票?如果你不说出你不喜欢的是什么,那是毫无意义的……我们在大学里必须写“哈夫”和“吹气”,这会唤起记忆。因此,实际上不需要构建二叉树就可以存储此表示。存储表示不需要构建二叉树。但是,代码通常以二叉树的形式直观地表示,因为这样更容易阅读。谢谢,我将查看您的建议。