c++ 中, std::vector<float> 如何转 QByteArray, 以及如何反转回来
时间: 2024-02-17 14:03:10 浏览: 196
将 `std::vector<float>` 转换为 `QByteArray`,可以使用 `QByteArray` 的构造函数,将 `std::vector<float>` 的数据指针和大小传递给它。反过来,将 `QByteArray` 转换回 `std::vector<float>`,可以使用 `std::vector<float>` 的 `assign` 函数,将 `QByteArray` 的数据指针和大小传递给它。
下面是示例代码:
```c++
#include <QByteArray>
#include <vector>
// 将 std::vector<float> 转换为 QByteArray
QByteArray vectorToByteArray(const std::vector<float>& vec) {
const char* data = reinterpret_cast<const char*>(vec.data());
return QByteArray(data, vec.size() * sizeof(float));
}
// 将 QByteArray 转换为 std::vector<float>
std::vector<float> byteArrayToVector(const QByteArray& byteArray) {
const float* data = reinterpret_cast<const float*>(byteArray.data());
int size = byteArray.size() / sizeof(float);
std::vector<float> vec;
vec.assign(data, data + size);
return vec;
}
```
使用示例:
```c++
std::vector<float> vec = { 1.2f, 3.4f, 5.6f };
// 将 std::vector<float> 转换为 QByteArray
QByteArray byteArray = vectorToByteArray(vec);
// 将 QByteArray 转换为 std::vector<float>
std::vector<float> vec2 = byteArrayToVector(byteArray);
```
需要注意的是,这个方法假设 `std::vector<float>` 是连续存储的,即数据在内存中是连续的。如果不是连续存储的,需要使用其他方法来进行转换。
阅读全文