2014-09-29 261 views
0

我实现了一个LZW压缩器,它使用散列函数将字符串编码为整数。我将编码的字符串存储在一个文本文件中。现在我需要解压缩相同的代码。我很困惑如何在从文本文件中读取时区分两位数的整数和单个数字的整数。从文件中读取整数C++

例如,我的字典是:

0 c 
1 bba 
3 aa 
5 ac 
7 bb 
8 aab 
9 a 
10 b 

等。

现在,假设我将字符串'aaabbbac'编码为“9 3 10 7 9 0”,该字符串以9310790的形式存储在文本文件中。如何在读取文件时区分0,1和10?

+0

如果它们存储完全一样(不与每个二进制作为一个字节),那么你不能区分分隔符。 – matsjoyce 2014-09-29 16:04:45

+1

为什么不把它们存储为实际整数(不是一个表示整数的字符串) – Borgleader 2014-09-29 16:04:49

+2

通常在压缩程序中,您不写入文本,也不写入二进制字节,而是编写一个*位流*(您的代码边界可以不落在字节边界上)。下一个要读取的值的位宽由解码器状态决定。 – 2014-09-29 16:18:53

回答

0

一些选项:

  • 保存它们的二进制格式,而非文本格式。这对读写来说可能是一个小挑战,但它可能值得学习。问题是如果你想使用文本编辑器可视化数字,但你可以找到一些工具来可视化二进制文件。假设每个整数有2个字节(类型为short),你的例子将是hexa(不考虑endian):00 09 00 03 00 0a 00 07 00 09 00 00

  • 以固定长度存储数字。例如:printf(“%03d”,数字)将始终创建3位数字。你的例子是:009003010007009000

  • 使用逗号或者分号分隔:9,3,10,7,9,0