Question

I'm trying to write the contents of an untyped object that holds the bytes of an image into a vector filled with unsigned char. Sadly, i cannot get it to work. Maybe someone could point me in the right direction?

Here is what I have at the moment:

vector<unsigned char> SQLiteDB::BlobData(int clmNum){
   //i get the data of the image
   const void* data = sqlite3_column_blob(pSQLiteConn->pRes, clmNum);
   vector<unsigned char> bytes;
   //return the size of the image in bytes
   int size = getBytes(clNum);
   unsigned char b[size];
   memcpy(b, data, size);
   for(int j=0;j<size,j++){
      bytes.push_back(b[j])M
   }
   return bytes;
}

If i try to trace the contents of the bytes vector it's all empty.

So the question is, how can i get the data into the vector?

Was it helpful?

Solution

You should use the vector's constructor that takes a couple of iterators:

const unsigned char* data = static_cast<const unsigned char*>(sqlite3_column_blob(pSQLiteConn->pRes, clmNum));
vector<unsigned char> bytes(data, data + getBytes(clNum));

OTHER TIPS

Directly write into the vector, no need for additional useless copies:

bytes.resize(size);
memcpy(bytes.data(), data, size);

Instead of a copy, this has a zero-initialisation, so using the constructor like Maxim demonstrates or vector::insert is better.

const unsigned char* data = static_cast<const unsigned char*>(sqlite3_column_blob(pSQLiteConn->pRes, clmNum));
bytes.insert(data, data + getBytes(clNum));
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top