霍夫曼编码

发布于 2024-07-16 14:52:28 字数 67 浏览 6 评论 0原文

我正在尝试实现霍夫曼压缩算法,该算法需要将可变长度的位写入文件。 C++中有没有办法将1位粒度的可变长度数据写入文件?

I am trying to implement the huffman algorithm for compression, which requires writing bits of variable length to a file. Is there any way in C++ to write variable length data with 1-bit granularity to a file?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

洋洋洒洒 2024-07-23 14:52:28

不,可以写入文件的最小数据量是一个字节。

您可以使用 bitset 来更轻松地操作位,然后使用 ofstream 写入文件。 如果您不想使用位集,可以使用按位运算符< /a> 在保存数据之前对其进行操作。

No, the smallest amount of data you can write to a file is one byte.

You can use a bitset to make manipulating bits easier, then use an ofstream to write to file. If you don't want to use bitset, you can use the bitwise operators to manipulate your data before saving it.

星軌x 2024-07-23 14:52:28

您可以访问和保存的最小位数是 8 = 1 字节。 您可以使用位运算符 ^ & 访问字节中的位。 |。

您可以使用以下方式将第 n 位设置为 1:

my_byte = my_byte | (1 << n);

其中 n 为 0 到 7。

您可以使用以下方式将第 n 位设置为 0:

my_byte = my_byte & ((~1) << n);

您可以使用以下方式切换第 n 位:

my_byte = my_byte ^ (1 << n);

更多详细信息 此处

The smallest amount of bits you can access and save is 8 = 1 byte. You can access bits in byte using bit operators ^ & |.

You can set n'th bit to 1 using:

my_byte = my_byte | (1 << n);

where n is 0 to 7.

You can set n'th bit to 0 using:

my_byte = my_byte & ((~1) << n);

You can toggle n'th bit using:

my_byte = my_byte ^ (1 << n);

More details here.

转身以后 2024-07-23 14:52:28

klew的答案可能是你想要的,但只是为了在Bill所说的基础上添加一些内容,Boost库有一个 dynamic_bitset 我发现在类似情况下很有帮助。

klew's answer is probably the one you want, but just to add something to what Bill said, the Boost libraries have a dynamic_bitset that I found helpful in a similar situation.

戒ㄋ 2024-07-23 14:52:28

您需要的有关位调整的所有信息都在这里:
如何设置、清除和切换一位?

但是您可以放入文件中的最小对象是一个字节。
我会使用dynamic_bitset,每次大小大于8时,将底部8位提取到一个字符中并将其写入文件中,然后将剩余位向下移动8位(重复)。

All the info you need on bit twiddling is here:
How do you set, clear, and toggle a single bit?

But the smallest object that you can put in a file is a byte.
I would use dynamic_bitset and every time the size got bigger than 8 extract the bottom 8 bits into a char and write this to a file, then shift the remaining bits down 8 places (repeat).

木森分化 2024-07-23 14:52:28

不,您必须打包字节。 因此,您的文件中需要一个标头来指定文件中有多少元素,因为您可能有未使用的尾随位。

No. You will have to pack bytes. Accordingly, you will need a header in your file that specifies how many elements are in your file, because you are likely to have trailing bits that are unused.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文