编辑:在做了更多研究之后,似乎我真正需要的是大端到中端,反之亦然。所以 12345678 -> 34127856 并返回。很抱歉有任何混淆。
我有一个小文件,正好 16MB。我正在将整个文件读入缓冲区。如果可能的话,我试图做的是一次性对整个文件/缓冲区进行字节交换(例如,统一/全局交换 ADDECEFA => DEADFACE)。我已经阅读了无数页的字节交换,但是由于某种原因,很多按位/字节交换的东西都在我头上(很可能是愚蠢的大脑)。如果有人知道傻瓜的按位/字节交换,请指出我正确的方向!
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
const char * suffix = ".reversed";
FILE *input = fopen(argv[1], "rb");
char * out = strcat(argv[1], suffix);
FILE *output = fopen(out, "wb");
int data[16384];
int swapped;
while(fread(data,sizeof data, 1, input)){
swapped = ((data & 0x000000FF) << 24) |
((data & 0x0000FF00) << 8) |
((data & 0x00FF0000) >> 8) |
((data & 0xFF000000) >> 24);
fwrite(swapped, sizeof data , 1, output);
/* by golly it copies the file fast as heck!
but i am unsure how to manipulate 'data' buffer
so as it uniformly/globaly swaps ADDECEFA => DEADFACE
*/
}
}
另外,如果你看到我在我的代码中做错了什么,请告诉我并告诉我一个更好的方法。如果您需要我详细说明任何事情,请不要犹豫。谢谢,祝你好运。
编辑:我添加了我失败的尝试之一。我的最终目标是在将字节写回 outfile 时交换字节并尽可能有效地交换它们。