質問
C++でC#のMemoryStream
クラスと同様の機能やクラスはありますか?
C++にて可変長バッファを扱うよい方法があればご教示いただきたく、よろしくお願いします。
前提・実現したいこと
C++でバイナリデータの加工を行うメソッドを実装しています。
引数で加工元のデータを渡して、アウトパラメータで加工後のバイナリを受け取ります。
しかしながら、加工後のデータサイズが処理してみるまで分からないため、アウトパラメータ用のバッファを予め確保できません。(加工後のデータは元データより必ず大きくなります)
そこで C# の MemoryStream のようなものがないかどうか調べていたのですが、結局何を使えばいいかわかりませんでした。
C#での処理イメージ
以下のようなコードをC++で実現したいと考えています。
csharp
1 private void EditBinary(FileStream fs, MemoryStream ms) 2 { 3 using (var br = new BinaryReader(fs)) 4 { 5 var binary = br.Read(); 6 // バイナリデータを加工して MemoryStream に書き込む 7 var editted = new byte[1024]; 8 var offset = 0; 9 var cnt = 0; 10 while (true) 11 { 12 ms.Write(editted, offset, 0); 13 break; 14 } 15 } 16 }
C++の関数定義(現状)
FILE*
を渡せば、可変長のデータを書き込むことができるだろうと考え、現状以下のような形でコーディングしています。
しかし、加工後のデータをファイルに出力する必要はないため、できればメモリ内で完結させたいです。
C++
1//! @brief バイナリデータを加工します 2/*! 3* @param[in] in 加工元データを格納したファイル 4* @param[out] out 加工後のデータを格納するファイル 5* @return 加工後のデータサイズ 6*/ 7static size_t 8Edit_Binary(FILE* in, FILE* out);
開発環境、その他補足情報
- OS:Windows 10 Pro 64bit
- IDE:Visual Studio 2017
- 言語:VC++
C++の経験は浅く理解が乏しい部分がありますが、どうぞよろしくお願いします。
不足情報ございましたらご指摘願います。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/16 00:59
2018/04/16 01:24
2018/04/16 01:35