2012-05-01 14 views
0
#include <stdio.h> 
#include <string.h> 
#include <cstdlib> 

const int KEY=118; 

int main() 
{ 
    FILE* hOFile = fopen("file1","w"); 
    FILE* hIFile; 
    char sign; 

    for(int i=254; i>=0; i--) 
    fprintf(hOFile,"%c",i); 

    fclose(hOFile); 

    hIFile = fopen("file1","r"); 
    hOFile = fopen("file2","w"); 

    for(int i=254; i>=0; i--) 
    { 
     fscanf(hIFile,"%c",&sign); 
     fprintf(hOFile,"%c",(sign^KEY)); 
    } 

    fclose(hIFile); 
    fclose(hOFile); 

    hIFile=fopen("file2","r"); 
    hOFile=fopen("file3","w"); 

    for(int i=254; i>=0; i--) 
    { 
     fscanf(hIFile,"%c",&sign); 
     fprintf(hOFile,"%c",(sign^KEY)); 
    } 

    fclose(hIFile); 
    fclose(hOFile); 
} 

私はfile3とfile1が同じであることを意味しました。残念ながら、ASCIIのKEY-9 character.To後FILE3クラッシュは、この例のために、具体的に:1つのプログラムでXORでファイルをエンコードしてデコードする

はFile1:

ţýüűúůř÷öőôóňńđďîíěëęéčçćĺäăâáŕßŢÝÜŰÚŮŘ×ÖŐÔÓŇŃĐĎÎÍĚËĘÉČÇĆĹÄĂÂÁŔżľ˝Ľ»SA・¶μ'ł˛±°Z "〜"〜 "〜"〜 "〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 ;:/.-,+*)( '&%$# "!

ファイル3 :

ţýüűúůř÷öőôóňńđďîíěëęéčçćĺäăâáŕßŢÝÜŰÚŮŘ×ÖŐÔÓŇŃĐĎÎÍĚËĘÉČÇĆĹÄĂÂÁŔżľ˝Ľ»SA・¶μ'ł˛±°Ż®¬«Ş©¨§|Ą¤Ł˘źžťś>š™ - •」「 '' ŹŽŤŚ

答えて

3

あなたが読んでバイナリモード(rb、ないr)でファイルを開くと書き込みバイナリモードする必要がある(wbを、だけでなくw) 、またはシステムがいくつかの変換を実行しようとしますあなたが望んでいないあなたのために。

+0

これは動作しますが、なぜそれがテキストモードでなかったのか分かりません:( – 0x6B6F77616C74

+0

@kutacz私が言ったように、システムは変換を実行します。例えば、改行文字をシステムで使用するものに変換します。暗号化のためにバイナリデータを扱っているときには起こりたくありません。 –

関連する問題