Convert float vector to byte vector and back

byte, c++, floating-point

Solution

Solved:

I think the problem was here

vector<unsigned char> byteVec;

for (int i = 0; i < 3; i++)
    byteVec.push_back(bytes[i]);

I removed that and replaced it with

vector<unsigned char> byteVec(bytes, bytes + sizeof(float) * myFloats.size());

then the rest works fine!

Also, remember to use (bytes) instead of (*bytes) here

float* floatArray = reinterpret_cast<float*>(bytes);

Problem

I'm trying to do some conversions between float and unsigned char arrays (std::vector in this case) and i've run into some troubles. I've converted the vector of floats to unsigned char like this... ``` vector<float> myFloats; myFloats.push_back(1.0f); myFloats.push_back(2.0f); myFloats.push_back(3.0f); const unsigned char* bytes = reinterpret_cast<const unsigned char*>(&floats[0]); vector<unsigned char> byteVec; for (int i = 0; i < 3; i++) byteVec.push_back(bytes[i]); ``` I'm hoping i've done this correctly, if not that would be the reason why the next part wont work. ``` // converting back somewhere later in the program unsigned char* bytes = &(byteVec[0]); // point to beginning of memory float* floatArray = reinterpret_cast<float*>(*bytes); for (int i = 0; i < 3; i++) cout << floatArray[i] << endl; // error here ``` I've tried using (bytes) instead of (*bytes) in that last part but that prints the wrong values. Doing this also printed the wrong values ``` for (int i = 0; i < 3; i++) cout << (float)bytes[i] << endl; ``` Not sure how to get my original float values back from this. Thanks for any help.

Original source