编写程序,从一个二进制文件中读入若干个字节,将每一个字节的8位逆转后,按字节的输入顺序输出到另一个二进制文件中。这里的逆转是指:当unsigned char k=0xAC(二进制值为:10101100),逆转后k的值为:0x35 (二进制值为:00110101)。并考虑当文件中的数据量很大时(比如,几百MB, 几百GB甚至几百TB),如何优化此程序,使其执行效率最高。 写出优化思路并给出优化后的程序。以下是我第一次写的程序,不知该如何优化。
#include
#include
#pragma warning(disable:4996)
unsigned char reverse(unsigned char c)
{
c = (c & 0x55) << 1 | (c & 0xAA) >> 1; //按两位翻转一次
c = (c & 0x33) << 2 | (c & 0xCC) >> 2; //按四位翻转一次
c = (c & 0x0F) << 4 | (c & 0xF0) >> 4; //按八位翻转一次
return c;
}
int main()
{
unsigned char a = 0x00, c;
int i, j;
FILE* fp,* fp2;
if ((fp = fopen("ejz", "r+b")) == NULL)
{
printf("cannot open this file!\n");
exit(0);
}
if ((fp2 = fopen("ejzt", "w+b")) == NULL)
{
printf("cannot open this file!\n");
exit(0);
}
fread(&a, sizeof(unsigned char), 1, fp);
while (!feof(fp))
{
c = reverse(a);
fwrite(&c, sizeof(unsigned char), 1, fp2);
fread(&a, sizeof(unsigned char), 1, fp);
}
fclose(fp);
fclose(fp2);
system("pause");
return 0;
}
“Devil组”引证GPT后的撰写:
1
2
3.