【发布时间】:2014-06-06 05:22:24
【问题描述】:
假设我有一个字符数组 char a[8] 包含 10101010。如果我将此数据存储在 .txt 文件中,则此文件有 8 个字节大小。现在我在问如何将这些数据转换为二进制格式并将其保存为 8 位(而不是 8 字节)的文件,以便文件大小只有 1 字节。
另外,一旦我将这 8 个字节转换为单个字节,我应该将输出保存为哪种文件格式? .txt 或 .dat 或 .bin?
我正在研究文本文件的霍夫曼编码。我已经将文本格式转换为二进制,即 0 和 1,但是当我将此输出数据存储在文件中时,每个数字(1 或 0)占用一个字节而不是一个位。我想要一个解决方案,每个数字只需要一点。
char buf[100];
void build_code(node n, char *s, int len)
{
static char *out = buf;
if (n->c) {
s[len] = 0;
strcpy(out, s);
code[n->c] = out;
out += len + 1;
return;
}
s[len] = '0'; build_code(n->left, s, len + 1);
s[len] = '1'; build_code(n->right, s, len + 1);
}
这就是我在 Huffman 树的帮助下构建代码树的方式。还有
void encode(const char *s, char *out)
{
while (*s)
{
strcpy(out, code[*s]);
out += strlen(code[*s++]);
}
}
这就是我编码以获得最终输出的方式。
【问题讨论】:
-
字符是 0 和 1,还是 '0' 和 '1'?一个关于如何构建数据的简短示例会有所帮助。
-
@Edward 我正在研究文本文件的霍夫曼编码。我已经将文本格式转换为二进制,即 0 和 1,但是当我将此输出数据存储在文件中时,每个数字(1 或 0)占用一个字节而不是一个位。我想要一个解决方案,使每个数字只需要一点点。要我分享完整的代码吗?
-
一个简短的独立示例会很有用。从你的描述很难看出你实际拥有什么。如果您已将数据转换为二进制,则每位不会有一个数字。
-
@RetiredNinja 这是'0'和'1'
-
how to ask 的概述可能会有所帮助。
标签: c++ file compression byte huffman-code