I have a char array which contains null characters at random locations. I tried to create an iStringStream using this array (encodedData_arr) as below,
I use this iStringStream to insert binary data(imagedata of Iplimage) to a MySQL database blob field(using MySQL Connector/C++’s setBlob(istream *is) ) it only stores the characters upto the first null character.
Is there a way to create an iStringStream using a char array with null characters?
unsigned char *encodedData_arr = new unsigned char[data_vector_uchar->size()];
// Assign the data of vector<unsigned char> to the encodedData_arr
for (int i = 0; i < vec_size; ++i)
{
cout<< data_vector_uchar->at(i)<< " : "<< encodedData_arr[i]<<endl;
}
// Here the content of the encodedData_arr is same as the data_vector_uchar
// So char array is initializing fine.
istream *is = new istringstream((char*)encodedData_arr, istringstream::in || istringstream::binary);
prepStmt_insertImage->setBlob(1, is);
// Here only part of the data is stored in the database blob field (Upto the first null character)
There is nothing special about null characters in strings
Of course if you do
It will interpret that as a C-style string converted to
std::string, and thus will stop at the\0, not taking it as a real content byte. Tellingstd::stringthe size explicitly allows it to consume any null byte as real content data.If you want to read directly from a char array, you can use
strstreamThat will directly read from the data provided by
data, up toNbytes.strstreamis declared “deprecated” officially, but it’s still going to be in C++0x, so you can use it. Or you create your ownstreambuf, if you really need to read from a rawchar*like that.