2011-12-21 24 views
0

ファイルをバイトからバイトに読み込みたい。しかし私のプログラムは最初に破るwhileストリームを含むファイルを読み込む

ifstream infile("new.pdf",ifstream::binary); 
ofstream outfile("file.pdf",ofstream::binary); 
char *c; 
while(infile.read(c,sizeof(char))) 
{ 
    mpz_t M; 
    mpz_t K; 
    mpz_init2(M,10); 
    mpz_set_ui(M,(int)c); 
    mpz_init2(K,10); 
    mpz_powm(K,M,e,n); 
    char *x; 
    mpz_get_str(x,10,K); 
    outfile.write(x,sizeof(char)); 
} 

infile.close(); 
outfile.close(); 
system("pause"); 
infile.open("file.pdf",ifstream::binary); 
outfile.open("newt.pdf",ofstream::binary); 
while(infile.read(c,sizeof(char))) 
{ 
    mpz_t C; 
    mpz_t K; 
    mpz_init2(K,10); 
    mpz_init2(C,10); 
    int x=(int)c; 
    mpz_set_ui(K,x); 
    mpz_powm(C,K,d,n); 
    char *s; 
    mpz_get_str(s,10,C); 
    outfile.write(s,sizeof(char)); 
    } 
infile.close(); 
outfile.close(); 

どうしたの?

ファイルをecnryptしてから暗号化する必要があります。 私は入力ファイルからバイトを読み込み、それをecnryptして別のファイルに書き込むことにしました。

+0

を。 –

+0

私はあなたがGMPを使用していることに気付きました。あなたはmpz_set(K、mpz_t op)のようなものを使って、最初のwhileループでKの値を設定してはいけませんか? – Neo

+0

それは不必要ではありません。それはそれなしで動作します。私はファイルなしでプログラムでそれをテストしました。 –

答えて

0

ストリームを返すので、ifstream :: good()を使用してストリームが良好かどうかを最初に確認してください。また、同じ機能を使用してファイルの終わりをチェックする必要があるかもしれません。

+0

'istream :: read'は入力を試みる前にストリームの状態をチェックします。 – Cubbi

4

初期化されていないポインタをread関数に渡していますが、これは未定義の動作です。

char *c; // this points off in space or who knows where 
while(infile.read(c,sizeof(char))) // therefore, this is undefined behavior 

この試してみてください:あなたはそれが間違っている、と何をやっているし、それを希望する理由をより明確に、プログラムが何をしているかを述べる必要がある

char c; 
while(infile.read(&c,sizeof(char))) 
+0

この行を渡したが、 'outfile.write'で途切れる –