Question

I ai un bloc de données binaires définies comme suit:

adresse vide de *, size_t binarySize;

que je veux stocker dans une base de données MySQL en utilisant MySQL C ++ Connector.

La fonction setBLOB () prend istream.

La question:

Comment puis-je convertir un vide brut adresse *, size_t binarySize soit un objet ou istream istringstream? Est-il possible de le faire sans « copier » les données? à savoir dire istream le pointeur et la taille afin qu'il puisse pointer vers elle.

Était-ce utile?

La solution

Vous devez sous-classe streambuf par exemple comme ceci:

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

Ensuite, vous pouvez instancier un objet istream qui utilise un DATABUF comme tampon, qui utilise lui-même votre bloc de données binaires. En supposant que binarySize spécifie la taille de vos données binaires en octets (sizeof (char) devrait être un octet), vous pouvez le faire comme ceci:

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

Cet objet istream vous pouvez maintenant passer à setBLOB ().

Cordialement, Elrohir

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top