有没有快速的way/trick在文件开头加一位?

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

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

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

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

但是这个方法肯定不够快。我也搜索了互联网,但我找不到这样的东西。是否有可能更快地做到这一点?

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

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

您提到以 32 位块(int,或更好的 uint32_t)读取文件并一次移动一个:这样做存在字节顺序问题。它不可移植,因为某些 CPU 将以小端顺序(英特尔架构)读取 uint32_t,而其他一些则以大端顺序(摩托罗拉、PowerPC、ea)读取。

甚至字节中的位顺序也有些混乱:在文件开头移动一点,你的意思是设置第一个字节的位 0x80 还是位 0x01第一个字节?位图文件和图形卡在这方面有冲突的约定。

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