バイナリ データを保存するために MySQL C++ コネクタを使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1071120

質問

次のように定義されたバイナリ データのブロックがあります。

void* アドレス、size_t binarySize;

MySQL C++ コネクタを使用して MySQL データベースに保存したいと考えています。

関数 setBlob() は istream を受け取ります。

質問:

生の void* アドレス、size_t binarySize から istream オブジェクトまたは isstringstream に変換するにはどうすればよいですか?データを「コピー」せずにこれを行うことは可能ですか?つまりistream にポインターとサイズを伝えて、それを指すことができるようにします。

役に立ちましたか?

解決

streambuf をサブクラス化する必要があります。このような:

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

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

DataBuf buffer((char*)address, binarySize);
istream stream(&buffer);

その istream オブジェクトを setBlob() に渡すことができるようになりました。

よろしく、エルロヒル

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top