我正在尝试在float和unsigned char数组之间进行一些转换(在这种情况下是std :: vector),我遇到了一些麻烦。
我已将浮点数向量转换为无符号字符,如此...
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
我尝试在最后一部分使用(字节)而不是(*字节),但是会输出错误的值。这样做也会打印错误的值
for (int i = 0; i < 3; i++)
cout << (float)bytes[i] << endl;
不确定如何从此获取原始浮动值。
感谢您的帮助。
答案 0 :(得分: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)
float* floatArray = reinterpret_cast<float*>(bytes);
答案 1 :(得分:2)
我必须通过TCP发送原始字节数据。我使用了一个包含单个unsigned char[4]
数组的结构,并使用memcpy
将浮点值中的字节复制到此数组的开头。它可能不太理想,但它确实适合我的目的。显然你可以反过来检索数据。