Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# 哈夫曼密码。减压阶段。如何从列表中的文件.bin中提取字节数组(或逐字节提取)<;int>;这将是一个8位数组_C#_.net_Huffman Code_Binaryreader_Binarywriter - Fatal编程技术网

C# 哈夫曼密码。减压阶段。如何从列表中的文件.bin中提取字节数组(或逐字节提取)<;int>;这将是一个8位数组

C# 哈夫曼密码。减压阶段。如何从列表中的文件.bin中提取字节数组(或逐字节提取)<;int>;这将是一个8位数组,c#,.net,huffman-code,binaryreader,binarywriter,C#,.net,Huffman Code,Binaryreader,Binarywriter,我正在尝试实现对.txt文件的哈夫曼压缩和解压缩。压缩效果很好:简而言之,我构建了二叉树,其中符号是叶子,用0和1的List对每个符号进行编码,为整个文本形成一个0和1的长字符串(通过Join方法),并将每个8位字(包含8个二进制数字,仅为Char)写入文件。哇,文件变小了 现在进入下一个阶段-解压-我需要使用BinaryReader从文件中逐字节读取,然后再次将其转换为List或String,但不转换为int或char,它们分别占用4或1个字节 这是我的假设。也许有更好的主意?我想知道如何处理

我正在尝试实现对.txt文件的哈夫曼压缩和解压缩。压缩效果很好:简而言之,我构建了二叉树,其中符号是叶子,用0和1的
List
对每个符号进行编码,为整个文本形成一个0和1的长字符串(通过
Join
方法),并将每个8位字(包含8个二进制数字,仅为
Char
)写入文件。哇,文件变小了

现在进入下一个阶段-解压-我需要使用
BinaryReader
从文件中逐字节读取,然后再次将其转换为
List
String
,但不转换为
int
char
,它们分别占用4或1个字节


这是我的假设。也许有更好的主意?我想知道如何处理这个问题。

您已经创建了一个二叉树,其中叶对应于所有不同的字符,对吗?这就是解压/解码二进制文件所需的全部信息

以下是一个很好的解释:

  • 我们从根开始,接着做,直到找到一片叶子
  • 若当前位为0,则移动到树的左节点
  • 如果位为1,则移动到树的右节点
  • 如果在遍历过程中,我们遇到一个叶节点,我们将打印该特定叶节点的字符,然后再次继续 从步骤1开始的编码数据
  • 当树的右侧或左侧都没有子节点时,就知道有一个叶节点


    希望这有帮助

    Warcaith,谢谢你的回答,但我只是想知道如何简单地从二进制文件中获取我的0和1字符串。我发现我可以使用
    Convert.ToString(byte,2)
    逐字节读取,并获得它的二进制表示形式。但现在我意识到当字节以
    0开始时可能会出现问题。下面是针对java[link]()讨论的相同问题哦,对了,我想我误解了你,对不起!如果您找到了解决方案,请务必回答,以便其他程序员可以利用您的帖子!:)是的,但是在我克服了
    Convert.ToString(byte,2)
    方法的错误之后。但这绝对是个好主意!您是否尝试使用解决方案解码文件?您是取回了旧文本还是在开始时遇到了
    0
    问题?