string をバイナリデータとして扱うの記事を見て、std::string型にバイナリデータ(画像)をいれて、取り出すというプログラムを下記のとおり書きました。
read関数でchar *に取り出した画像データを、std::string型にいれる際、下記ブログラムのNGの部分のように
c++
1 s = data;
と書くと、sにデータがうまく入らず(s.size()の値が8となった)、
c++
1 long long int i = 0; 2 while (i < size) 3 { 4 s += data[i++]; 5 }
と1バイトずつ、入れると所望の結果(input.pngとoutput.pngが同じ内容となる)になりました。
c++
1 s = data;
のように一度にデータをいれる方法はございますか。
※文字と画像が混在する入力を扱いたいのですが、もしstring型にいれて入力を加工できたら…と思っております。
c++
1#include <iostream> 2#include <fstream> 3 4int main(int argc, char *argv[], char *envp[]) 5{ 6 std::string s; 7 std::ifstream ifs("input.png", std::ios::in | std::ios::binary ); 8 9 ifs.seekg(0, std::ios::end); 10 long long int size = ifs.tellg(); 11 ifs.seekg(0); 12 13 char *data = new char[size]; 14 ifs.read(data, size); 15 16 // OK 17 long long int i = 0; 18 while (i < size) 19 { 20 s += data[i++]; 21 } 22 23 // NG 24 // s = data; 25 26 std::ofstream fout; 27 fout.open("output.png", std::ios::out|std::ios::binary|std::ios::trunc); 28 fout.write(s.c_str(), size); 29}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/03 00:22