0

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

void *アドレス、size_t binarySize;

MySQLC++コネクタを使用してMySQLデータベースに保存したい。

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

質問:

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

4

1 に答える 1

4

たとえば次のように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);

これで、setBlob()に渡すことができるそのistreamオブジェクト。

よろしく、Elrohir

于 2009-07-01T22:59:48.567 に答える