2011-07-05 5 views
0

Httpリクエスト用のテキストとバイナリデータを格納するBYTE *配列を作成する必要があります。 何かのように:C++/ATL。バイナリとテキストデータを連結するベストプラクティス

Content-Type: multipart/form-data; boundary=Asrf456BGe4h 

--Asrf456BGe4h 
Content-Disposition: form-data; name="DestAddress" 
... 
--Asrf456BGe4h 
Content-Disposition: form-data; name="AttachedFile1"; filename="photo.jpg" 
Content-Type: image/jpeg 
...binary data... 

私は彼らが私のバイナリファイルを切り詰める「原因標準ATL文字列を使用して怖いです。あなたはどのようにこのようなことを連結しますか?私はそのようにプログラムしたいと思います:

DynamicArray arr(); 
arr.Add("Content-Type ... "); 
arr.Add(imgContent, imgContentSize); 
arr.Add("Content-Type..."); 

BYTE* buf; 
arr.GetBits(buf); 

最後に、私はBYTE *配列を持っているはずです。そのような機能を提供するATLクラスは何ですか?

答えて

1

まず、生データをstd::stringに入れて、問題が発生する心配がありません。 std::stringにテキストが含まれることを期待している読者を混乱させるかもしれませんが、特定のケースでは(そして生のデータをHTTP応答に挿入することは有効な例です)、それは正当なものです。

第2の理由として、「バイナリファイルを切り捨てる」という意味がわかりません。ファイルがバイナリモードで書き込まれ、読み込まれる場合、問題はありません。確かに私がよく知っているシステム(UnixとWindows)にはありません。私は​​が定義されているかどうかはわかりませんしながら、

は最後に、(おそらく—または少なくともうまくいけば—、それはunsigned charです)。その場合、おそらく最も簡単な解決策は、std::vector<BYTE>を使用してバッファを構築することです。

buffer.append(str.begin(), str.end()); 

unsigned charcharの暗黙的な変換は、トリックはここにありません。)

+0

ええ、最後に私のコードがあります:文字列データ; data.append( ".."); data.append((char *)bits、size); –

1

私はあなたがMSVCを使用していると仮定します。それに文字列を追加するには?あなたの文字列を連結するのにstd::ropeクラスを使うことができると思います。STLの配布に同梱されていなければなりません。複数の文字列を連結すると効率的です。

最後のバイト配列はc_str()で取得できます。

+0

ありがとう、私はstd :: stringがすべての必要な機能を持っていることを知った:) –

関連する問題