4

我正在尝试在 float 和 unsigned char 数组(在本例中为 std::vector )之间进行一些转换,但遇到了一些麻烦。

我已经将浮点向量转换为 unsigned char 像这样......

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

我希望我已经正确地做到了这一点,如果不是这将是下一部分将无法工作的原因。

// 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

我尝试在最后一部分中使用 (bytes) 而不是 (*bytes) ,但打印出错误的值。这样做也会打印错误的值

for (int i = 0; i < 3; i++)
    cout << (float)bytes[i] << endl;

不知道如何从中取回我的原始浮点值。

谢谢你的帮助。

4

2 回答 2

5

解决了:

我认为问题出在这里

vector<unsigned char> byteVec;

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

我将其删除并替换为

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

然后其余的工作正常!

另外,请记住在这里使用 (bytes) 而不是 (*bytes)

float* floatArray = reinterpret_cast<float*>(bytes);
于 2012-06-13T19:51:44.253 回答
2

我不得不做这种事情来通过 TCP 发送原始字节数据。我使用了一个包含单个unsigned char[4]数组的结构,并用于memcpy将我的浮点值中的字节复制到该数组的开头。它可能并不理想,但对于我的目的来说它确实足够好。显然,您可以执行相反的操作来检索数据。

于 2012-06-13T19:43:20.127 回答