将标准的std::vector<char> data 转化位QByteArray data
时间: 2023-08-07 16:03:59 浏览: 177
可以使用QByteArray的构造函数将std::vector<char>转换为QByteArray,如下所示:
```cpp
std::vector<char> vec_data = {'a', 'b', 'c'};
QByteArray byte_data(vec_data.data(), vec_data.size());
```
这里使用了QByteArray的构造函数,它接受两个参数:第一个参数是数据指针,第二个参数是数据长度。在这里,我们将std::vector<char>的数据指针和长度传递给了QByteArray,从而将其转换为QByteArray类型的数据。
相关问题
error: ‘const class std::vector<char>’ has no member named ‘mid’
这个错误是因为`std::vector`没有`mid()`方法,`mid()`是`QByteArray`的方法。如果你想在`std::vector`中实现类似的功能,可以使用`std::copy()`函数或者`std::vector`的迭代器来截取部分数据。
以下是使用`std::copy()`函数来截取部分数据的示例代码:
```C++
std::vector<char> Data; // 定义要发送的数据
int SendByte = 0; // 定义已发送的字节数,初始为0
// 循环发送数据,直到全部发送完成
while (SendByte < Data.size())
{
// 计算剩余未发送的数据大小
int remainingSize = Data.size() - SendByte;
// 计算本次要发送的数据大小
int sendSize = std::min(remainingSize, MAX_SEND_SIZE); // MAX_SEND_SIZE是每次发送的最大数据量
// 创建一个存放要发送数据的缓冲区
std::vector<char> buffer(sendSize);
// 截取要发送的数据并复制到缓冲区中
std::copy(Data.begin() + SendByte, Data.begin() + SendByte + sendSize, buffer.begin());
// 发送缓冲区中的数据
m_Socket->send_to(boost::asio::buffer(buffer), m_DDPEndPoint);
// 更新已发送的字节数
SendByte += sendSize;
}
```
c++ 中, std::vector<float> 如何转 QByteArray, 以及如何反转回来
将 `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>` 是连续存储的,即数据在内存中是连续的。如果不是连续存储的,需要使用其他方法来进行转换。
阅读全文