バイナリ データを保存するために MySQL C++ コネクタを使用するにはどうすればよいですか?
-
21-08-2019 - |
質問
次のように定義されたバイナリ データのブロックがあります。
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() に渡すことができるようになりました。
よろしく、エルロヒル
所属していません StackOverflow