Convert float vector to byte vector and back

假装没事ソ 提交于 2019-12-19 21:06:04

问题


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.


回答1:


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



回答2:


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.



来源:https://stackoverflow.com/questions/11022099/convert-float-vector-to-byte-vector-and-back

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!