0

我有一个二进制数据块定义为:

void* 地址,size_t binarySize;

我想使用 MySQL C++ 连接器存储到 MySQL 数据库。

函数 setBlob() 采用 istream。

问题:

如何从原始 void* 地址 size_t binarySize 转换为 istream 对象或 istringstream?是否可以在不“复制”数据的情况下做到这一点?即告诉 istream 指针和大小,以便它可以指向它。

4

1 回答 1

4

你必须继承streambuf,例如:

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

然后你可以实例化一个 istream 对象,它使用 DataBuf 作为缓冲区,它本身使用你的二进制数据块。假设 binarySize 以字节为单位指定二进制数据的大小(sizeof(char) 应该是一个字节),您可以这样做:

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

您现在可以将该 istream 对象传递给 setBlob()。

问候, Elrohir

于 2009-07-01T22:59:48.567 回答