C++ 如何将QByteArray转换为字节字符串?

C++ 如何将QByteArray转换为字节字符串?,c++,qt5,C++,Qt5,我有一个QByteArray对象,其中包含256个字节。但是,当我尝试将其转换为字节字符串(std::string)时,它的长度为0到256。这与字符串的长度非常不一致,但数组中始终有256个字节。这些数据是加密的,因此我希望有256个字符的垃圾输出,但我得到的是随机字节数 下面是我用来尝试转换它的代码: //用256个字节填充数组(我尝试读取(256个)并得到相同的随机输出) QByteArray byteRecv=socket->read(2048); //发出随机垃圾(不是我需要的256字

我有一个
QByteArray
对象,其中包含256个字节。但是,当我尝试将其转换为字节字符串(
std::string
)时,它的长度为0到256。这与字符串的长度非常不一致,但数组中始终有256个字节。这些数据是加密的,因此我希望有256个字符的垃圾输出,但我得到的是随机字节数

下面是我用来尝试转换它的代码:

//用256个字节填充数组(我尝试读取(256个)并得到相同的随机输出)
QByteArray byteRecv=socket->read(2048);
//发出随机垃圾(不是我需要的256字符垃圾)
字符串recv=byteRecv.constData();
如果有必要知道,
socket
对象是一个
qtcsocket*


有什么方法可以精确地表示数组中的内容吗?我尝试将其转换为
QString
并使用
QByteArray::toStdString()
方法,但这两种方法都无法解决问题。

QByteArray::constData()
成员函数返回原始指针
const char*
。原始指针的
std::string

std::string(const char* s);
使用由
s
指向的以null结尾的字符串的副本初始化的内容构造字符串。字符串的长度由第一个空字符决定。如果
s
没有指向这样的字符串,则行为未定义

缓冲区不是空终止的字符串,中间可以包含空字符。所以你应该使用另一个构造函数

std::string(const char* s, std::size_type count);
它使用
s
指向的字符串的第一个
计数
字符构造字符串

即:

std::string recv(byteRecv.constData(), 256);

对于原始字节的集合,
std::vector
可能是更好的选择。您可以从两个指针构造它:

std::vector<char> recv(byteRecv.constData(), byteRecv.constData() + 256);
std::vector recv(byteRecv.constData(),byteRecv.constData()+256);