有没有一种在文件开头添加一位的快速方法/技巧

Is there a fast way/trick to add one bit at the beginning of a file?

本文关键字:技巧 一位 方法 开头 一种 文件 添加 有没有      更新时间:2023-10-16

对于一个特殊的算法,我必须多次在文件开头添加(或删除(一位。它必须是一个位,而不是像"0000 0001"那样的整个字节。

之后,我不必用新内容覆盖文件,所以只要在内存中编辑文件数据就足够了。对于这个算法,我可以在文件数据的末尾添加一个字节,比如"0000 0000"或"1000 0000"。

您可以将其概括为对整个文件的位移。我已经自己试过了。我以整数(32位(读取文件,在每种情况下都将其右移,并将最后一位从之前的整数转移到第一个位置。

但这种方法肯定不够快。我也在网上搜索过,但找不到这样的东西。也许有可能更快地做到这一点吗?

问题的快速答案是:没有办法有效地做到这一点。

长期的答案实际上是一系列新的问题:你真正打算通过这个实现什么?在文件开头移动一位到底是什么意思?

您提到以32位块(int或更好的uint32_t(读取文件并一次移动一个:这样做会出现字节排序问题。它是不可移植的,因为一些CPU将以小端序读取uint32_t(英特尔体系结构(,而另一些CPU则以大端序读取(摩托罗拉、PowerPC、ea(。

即使是字节中的位顺序也有点令人困惑:在文件开头移位一位,你的意思是设置第一个字节的位0x80还是第一个字节中的位数0x01?位图文件和图形卡在这方面有相互冲突的约定。

如果这个位文件是在程序之外指定的,您应该非常小心这些细节。如果这是你自己的发明,那么改变算法可能有助于简化这种情况。