C++ 通过Qt套接字发送64位整数

C++ 通过Qt套接字发送64位整数,c++,qt,qt5,C++,Qt,Qt5,我似乎不知道如何通过QSslSocket以网络字节顺序发送quint64。我今天搜索了不少,开始让我头疼了 quint64 m_ack; QSslSocket m_socket; 我使用“qToBigEndian”将其转换为网络字节顺序 quint64 ack_be = qToBigEndian(m_ack); 现在,我尝试了几种方法将该数字写入套接字,但它们都有故障 m_socket.write((const char*)(ack_be), sizeof(quint64)); m_s

我似乎不知道如何通过QSslSocket以网络字节顺序发送quint64。我今天搜索了不少,开始让我头疼了

quint64    m_ack;
QSslSocket m_socket;
我使用“qToBigEndian”将其转换为网络字节顺序

quint64 ack_be = qToBigEndian(m_ack);
现在,我尝试了几种方法将该数字写入套接字,但它们都有故障

m_socket.write((const char*)(ack_be), sizeof(quint64));
m_socket.write(reinterpret_cast<const char*>(ack_be), sizeof(quint64));
m_socket.write((const char*)(ack_be),sizeof(quint64));
m_socket.write(reinterpret_cast(ack_be),sizeof(quint64));
我宁愿使用std::uint64\t而不是quint64,但qToBigEndian在以下方面失败:

test.cpp:(.text.startup+0xa): undefined reference to `unsigned long qbswap<unsigned long>(unsigned long)'
test.cpp:(.text.startup+0xa):对“unsigned long qbswap(unsigned long)”的未定义引用
作为参考,quint64似乎是“long unsigned int”

我正在使用启用了c++11支持的Qt5。另外,请注意,这不是我返回的TCP ack,这只是我与之接口的协议的一部分


谢谢。

您可以使用QDataStream将qint64或quint64转换为QByteArray。(如Qt示例中所述)

QByteArray阵列;
qint64 m_ack=255;
QDataStream流(&array,QIODevice::WriteOnly);
请参见此示例项目-
QByteArray array;
qint64 m_ack = 255;
QDataStream stream(&array, QIODevice::WriteOnly);
stream << m_ack;
qDebug() << "array sent:" << QString(array.toHex());