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);