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

时间:2015-05-17 10:34:49

标签: c++ optimization bit bitwise-operators

对于特殊算法,我必须在文件开头添加(或删除)一次。它必须是一点而不是整个字节,如&00; 0000 0001'。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

长期答案实际上是一系列新问题:你真正想要实现的目标是什么?通过在文件开头移位一位,你甚至意味着什么呢?

你提到用32位块( <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <com.github.mikephil.charting.charts.LineChart android:id="@+id/chart1" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_alignParentTop="true"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="change" android:gravity="top|left" android:id="@+id/change" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="add" android:gravity="top|center_horizontal" android:id="@+id/add" /> <EditText android:inputType="number" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="top|right" android:id="@+id/edit"/> </LinearLayout> </RelativeLayout> 或更好的int)读取文件并一次移动一个:这样做有一个字节排序问题。它不可移植,因为有些CPU会以小端序(英特尔架构)读取uint32_t,而其他一些CPU则以大端序(Motorola,PowerPC,ea)读取。

即使以字节为单位的位也有些令人困惑:通过在文件开头移位,是指设置第一个字节的第0x80位还是第一个字节的第0x01位?位图文件和图形卡在这方面存在冲突的惯例。

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