我正在尝试从 QTcpSocket 读取传入数据,但它给了我错误:
error: no matching function for call to 'qFromBigEndian(char [4])'
qint32 peekedSize = qFromBigEndian<qint32> (buffer);
我做错了什么?
这是我的功能:
void TcpServer::readIncomingData(){
if(mDebug)
qDebug() << "readIncomingData()";
QTcpSocket * tcpSocket = (QTcpSocket*)sender();
while(true){
if (tcpSocket->bytesAvailable() < 4){
break;
}
char buffer[4];
tcpSocket->peek(buffer, 4);
qint32 peekedSize = qFromBigEndian<qint32> (buffer);
if (peekedSize==0xffffffffu) // null string
peekedSize = 0;
peekedSize += 4;
QString str;
QDataStream(tcpSocket) >> str;
emit stringHasBeenRead(str);
}
}
我已经包含了标题:
#include <QtNetwork>
#include <QtEndian>
#include <QtCore>
#include <QDataStream>
#include <QtGlobal>
但仍然会出现同样的错误。
此外,在 .pro 文件中我有:
QT += core gui network
最佳答案
根据 Qt 文档 qFromBigEndian()
函数参数类型必须是 const uchar *
:
http://doc.qt.io/qt-5/qtendian.html#qFromBigEndian
试试这个:
qint32 peekedSize = qFromBigEndian<qint32>((const uchar*)&buffer);
关于c++ - 使用 qFromBigEndian 从 Char 转换为 Int 表示 : "No matching function for call to",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32442664/