简体   繁体   中英

Convert float vector to byte vector and back

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.

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);

I have had to do this kind of thing for sending raw byte data over TCP. I used a struct that contains a single unsigned char[4] array and use memcpy to copy the bytes in my float values to the start of this array. It may not be ideal but it does work well enough for my purposes. Obviously you can do the reverse to retrieve the data.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM