将浮点向量转换为字节向量并返回
Convert float vector to byte vector and back
我正在尝试在浮点数和无符号字符数组之间进行一些转换(在本例中为 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;
不知道如何从中恢复我的原始浮点值。
感谢您的任何帮助。
已解决:
我认为问题就在这里
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());
那么其余的都可以正常工作!
另外,请记住在此处使用(字节)而不是(*字节)
float* floatArray = reinterpret_cast<float*>(bytes);
我不得不做这种事情来通过TCP发送原始字节数据。我使用了一个包含单个unsigned char[4]
数组的结构,并使用memcpy
将浮点值中的字节复制到此数组的开头。它可能并不理想,但它确实足以满足我的目的。显然,您可以执行相反的操作来检索数据。
相关文章:
- 使用 std::vector::reverse_iterator 将 int 序列化为字节向量?
- C++如何将字符数组转换为字节向量(向量<byte>)
- 如何在C++中将字节向量(std::vector<uint8_t>)转换为不同的uint32_t,uint16_t和uint8_t变量
- 通过浮点指针操作字节向量
- 使用字节向量作为其他类型的原始存储是一种好的做法吗
- 如何以C++为单位计算向量中的字节数?
- 如何将向量>>>>字节迭代到函数
- 如何从文件中读取 n 个字节并使用<uint8_t>迭代器将它们放入向量中?
- 以零字节作为定界符/终端的字节加入(连接)字符串向量
- 使用原始字节向量作为提升序列化的存档的任何方法
- 将整数向量转换为字节数组向量,然后调用每个字节数组
- 从数据文件中读取每2个字节,并在向量中进行比较
- 在内存级别重新解释向量的字节
- 如何有效地对__m256i向量的字节进行重新排序(将int32_t转换为uint8_t)?
- 将字节向量转换为浮点数向量
- STD功能替换向量中的字节范围
- 向量 C++ 中的字节数
- 一次遍历 8 个向量字节并执行按位运算
- 向量的两倍到一个向量字节
- C++ 将向量转换为<BYTE>第一个向量字节为 0 的字符串