通过Qt Socket发送64位整数

时间:2014-09-20 12:32:18

标签: 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_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似乎是长期无符号整数&#39;

我使用Qt5并启用了c ++ 11支持。另外,请注意,这不是我返回TCP确认,这只是我与之交互的协议的一部分。

感谢。

1 个答案:

答案 0 :(得分:3)

您可以使用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());

结果:“数组发送:00000000000000FF”