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

Send 64-bit integer over Qt Socket

本文关键字:64位 整数 Qt 套接字 通过      更新时间:2023-10-16

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

quint64    m_ack;
QSslSocket m_socket;

我正在使用"qToBigEndian"将其按网络字节顺序排列。

quint64 ack_be = qToBigEndian(m_ack);

现在,我尝试了几种方法来将该数字写入套接字,但它们都是segfault。

m_socket.write((const char*)(ack_be), sizeof(quint64));
m_socket.write(reinterpret_cast<const char*>(ack_be), sizeof(quint64));

我宁愿使用std::uint64_t而不是quint64,但qToBigEndian失败时使用:

test.cpp:(.text.startup+0xa): undefined reference to `unsigned long qbswap<unsigned long>(unsigned long)'

作为参考,quint64似乎是"long-long unsigned int"

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

谢谢。

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

QByteArray array;
qint64 m_ack = 255;
QDataStream stream(&array, QIODevice::WriteOnly);
stream << m_ack;

为了确定您发送的内容,请使用显示您的数据

qDebug() << "array sent:" << QString(array.toHex());

结果:"array sent:00000000000000FF"