質問
C++(Turbo)でbmpファイルを読み取ろうとしています。しかし、バイナリストリームを印刷できません。
txtファイルをエンコードして復号化したいと考えています。これどうやってするの。bmp ファイルのヘッダーは 54 バイトであると読みました。しかし、txtファイルをbmpファイルのどこにどのように追加すればよいですか。?
私は 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();
コンソールでバイナリデータを見ることができません。
解決
私はあなたの質問が出回っ答えていると思います: する
あなたのcharがint型に変換しますが、
(少なくとも出力部のために)行われます他のヒント
ステガノグラフィで、少し私は、テキストを「追加」していない、それについて何を知っています。あなたは視覚的に明らかではありません非表示に何かピクセル(シェーディング、等。)への微妙な変化を作っているが、ピクセルを調べることによって、逆解読することができるはずです。ヘッダとは何かを持つべきではありません。 とにかく、私のそれ以外の非投票回答のポイントは、あなたのソリューションを設計し、次に来ると実装についての詳細を求めることができるように、あなたが行くとあなたは答えを求めるトピックについて学ぶ奨励することです。
あなたはファイルに任意のテキストを追加し、ビットパターンを変更する必要がありません。 一つの簡単な例: (ヘッダの後)ビットマップの内容を読み、自分のコンテンツを保持するためにバイトのそれぞれからビットを犠牲に
Windows上であれば、recodeののCreateFileを使用して、実際のエラーが何であるかを確認します。 Linuxでは、オープン(2)のための同上オンの場合。あなたは、問題をデバッグしたら、おそらく入出力ストリームに戻ってシフトすることができます。