編集:さらに調査を行った後、実際に必要なのはビッグエンディアンからミドルエンディアン、またはその逆のようです。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
*/
}
}
また、私のコードで何か間違ったことをしているのを見たら、教えて、より良い方法を教えてください。何か詳しく説明する必要がある場合は、遠慮なくお尋ねください。ありがとう、良いものを。
編集:失敗した試みの1つを追加しました。私の最終目標は、バイトを outfile に書き戻すときにバイトをスワップし、できるだけ効率的にスワップすることでした。