有没有一种在文件开头添加一位的快速方法/技巧
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
(英特尔体系结构(,而另一些CPU则以大端序读取(摩托罗拉、PowerPC、ea(。
即使是字节中的位顺序也有点令人困惑:在文件开头移位一位,你的意思是设置第一个字节的位0x80还是第一个字节中的位数0x01?位图文件和图形卡在这方面有相互冲突的约定。
如果这个位文件是在程序之外指定的,您应该非常小心这些细节。如果这是你自己的发明,那么改变算法可能有助于简化这种情况。
相关文章:
- 一位朋友将模板函数缩写为clang和gcc
- 斐波那契数列部分和的最后一位数字
- 将第 n 个斐波那契数的大斐波那契数的最后一位编程.C++
- 如何检查 int 中是否恰好设置了一位?
- 如何找到由公式计算的非常大的数字的最后一位数字?
- 我如何使用十一位数字
- 使用位操作将8字节数字中的每个字节中的一位转换为单个字节
- 我在spoj-lastdig2中使用我的代码 - 重新访问的最后一位数字
- 查找非常大的 2^n 数字的最后一位数字
- 如何计算具有相同SHA-160和的另一位模式
- C++ 仅输出一个小数点后一位
- 如何将用户输入的最小值限制为流大小减去一位
- 如何为一次只写一位的程序编写测试程序
- 减去2个数字的每一位
- 找到一个提升到一定幂的数字的最后一位
- 如何在c++中交换数字的第一位和最后一位
- 根据c++社区中一位知识渊博的作者的说法,下面显示的代码应该无法编译.他错了吗?
- 将浮点数四舍五入到小数点后一位,然后转换为字符串
- 指数的最后一位——答案错误
- 有没有一种在文件开头添加一位的快速方法/技巧