QByteArray::number(int)只有两个字节长

QByteArray::number(int) is only two bytes long

本文关键字:两个 字节 number int QByteArray      更新时间:2023-10-16

我正在编写一个程序,将文件从QT客户端发送到Android客户端。

特定的代码行通过以下代码将前缀为长度的文件名字符串写入它们之间维护的流:

qDebug() << socket.write(QByteArray::number((qint32)fileName.length()));

我已经将fileName.length()转换为qint32,但由于某种原因,上面的代码只向套接字的流写入2个字节(即控制台窗口显示qDebug()中的2)。

有什么原因吗?

转换为qint32是不相关的,没有任何作用。

QByteArray::number创建数字的ASCII文本表示。在这种情况下,fileName.length()必须有两个数字,并且介于10和99之间。因此,字节数组的内容是两个ASCII数字。注意,零终止符不包括在阵列的length()size()中,因此不由套接字发送。

您传输的是文本,特别是一个字符串,如果fileName.length()是21,它将是"21"

做你打算做的事情的代码是:

QDataStream str(&socket);
str << (qint32)fileName.length();

默认的字节顺序是big-endian(网络字节顺序)。您可以选择其他字节顺序:

str.setByteOrder(QDataStream::LittleEndian);
str << ...;