-1

C++(Turbo) で bmp ファイルを読み込もうとしています。しかし、バイナリストリームを印刷できません。

txtファイルをエンコードして復号化したい。これどうやってするの。bmp ファイルのヘッダーは 54 バイトであると読みました。しかし、bmpファイルにtxtファイルをどこにどのように追加する必要がありますか。?

私はTurbo C ++しか知らないので、同じトピックに関連する解決策や提案を提供していただければ助かります。

int main()
{
ifstream fr; //reads
ofstream fw; // wrrites to file
char c;
int random;
clrscr();
char file[2][100]={"s.bmp","s.txt"};

fr.open(file[0],ios::binary);//file name, mode of open, here input mode i.e. read only
if(!fr)
    cout<<"File can not be opened.";
fw.open(file[1],ios::app);//file will be appended
if(!fw)
    cout<<"File can not be opened";
while(!fr)
    cout<<fr.get(); // error should be here. but not able to find out what error is it

fr.close();
fw.close();
getch();
}

バイナリモードでtxtファイルを渡すと、このコードは正常に実行されます

編集 :

while(!fr)
    cout<<fr.get(); 

fr.get(c) で文字パラメーターを渡していたときに、テキストに対して正常に機能していたコンソールでバイナリ データを表示できません。

4

4 に答える 4

1

ファイルにテキストを追加するのではなく、ビットパターンを変更する必要があります。1つの簡単な例:ビットマップコンテンツ(ヘッダーの後)を読み取り、各バイトからビットを犠牲にしてコンテンツを保持します

于 2010-03-21T20:25:51.713 に答える
1

ステガノグラフィでは、私が知っていることはほとんどありませんが、テキストを「追加」していません。ピクセルに微妙な変更 (シェーディングなど) を加えて、視覚的に明らかではないものを隠していますが、ピクセルを調べることで逆復号化できるはずです。ヘッダーとは何の関係もありません。とにかく、私のそうでなければ役に立たない答えのポイントは、あなたが答えを求めているトピックに行って学ぶことを奨励することです.

于 2010-03-21T20:25:05.353 に答える
1

あなたの質問はすでに答えられていると思います: Cを使用してintをバイナリ表現で印刷します

char を int に変換すれば完了です (少なくとも出力部分については)

于 2010-03-21T20:49:03.273 に答える
0

Windowsの場合は、CreateFileを使用するように再コーディングして、実際のエラーを確認します。Linuxの場合は、open(2)も同様です。問題をデバッグしたら、おそらくiostreamに戻ることができます。

于 2010-03-21T20:26:31.187 に答える