c++ - 使用 qFromBigEndian 从 Char 转换为 Int 表示 : "No matching function for call to"

标签 c++ qt type-conversion endianness

我正在尝试从 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/

相关文章:

postgresql - 如何在CREATE TYPE中使用原始Postgres input/output_function?

c++ - 检查错误时重载 >> 运算符中的无限循环

c++ - ShellExecuteEx runas 中的 lpParameters

c++ - 删除框架图时 Qt3D 崩溃

c++ - 双倍为真/假

r - is.logical 和 is.factor in apply 的意外行为

c++ - 不使用 getline() 计算文件中的行数

c++ - 将 C++ 代码从 VC6 迁移到 VS2008 后出现错误 C2678 - 未找到采用 'type' 类型左侧操作数的运算符

c++ - 类名和同名变量的声明

c++ - Qt 如何设法将 main() 用于 Windows 中的非控制台应用程序?