Pregunta

Tengo un bloque de datos binarios definidos como:

void * dirección, size_t binarySize;

que quiero almacenar a una base de datos MySQL MySQL usando C ++ conector.

El setBlob función () toma istream.

La pregunta:

¿Cómo puedo convertir de un vacío * dirección de crudo, size_t binarySize ya sea un objeto o istream istringstream? ¿Es posible hacer esto sin "copia" de los datos? es decir, decirle istream el puntero y el tamaño para que pueda apuntar a la misma.

¿Fue útil?

Solución

Hay que subclase streambuf por ejemplo, de esta manera:

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

A continuación, puede crear una instancia de un objeto istream que utiliza un DATABUF como tampón, que a su vez utiliza su bloque de datos binarios. Suponiendo que binarySize especifica el tamaño de los datos binarios en bytes (sizeof (char) debe ser un byte), usted puede hacer esto de esta manera:

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

Ese objeto istream ahora se puede pasar a setBlob ().

Saludos, Elrohir

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top