2009-07-01 5 views
0

私は以下のように定義されたバイナリデータのブロックを持っています:バイナリデータの格納にMySQL C++コネクタを使用するにはどうすればよいですか?

void * address、size_t binarySize;

MySQL C++ Connectorを使用してMySQLデータベースに格納したいのですが。

関数setBlob()はistreamをとります。

質問:私は生のvoid *アドレスから変換することができますどのよう

、binarySize size_tののいずれかのIStreamオブジェクトまたはistringstream?データを「コピーする」ことなくこれを行うことは可能ですか?ポインタとサイズをistreamに指示します。

答えて

4

あなたはstreambufをサブクラス化する必要があります。

class DataBuf : public streambuf 
{ 
public: 
    DataBuf(char * d, size_t s) { 
     setg(d, d, d + s); 
    } 
}; 

次に、バイナリデータのブロックを使用するバッファとしてDataBufを使用するistreamオブジェクトをインスタンス化できます。 (はsizeof(char型)1バイトでなければなりません)binarySizeはバイト単位でバイナリデータのサイズを指定すると仮定すると、あなたはそのようにこれを行うことができます:

オブジェクトをISTREAM
DataBuf buffer((char*)address, binarySize); 
istream stream(&buffer); 

あなたは今(のsetBlobに渡すことができます)。

よろしくお願いします。 Elrohir

+0

素晴らしい回答!ありがとうございました! – sivabudh

関連する問題