QByteArray::number(int)只有两个字节长
QByteArray::number(int) is only two bytes long
我正在编写一个程序,将文件从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 << ...;
相关文章:
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 在编译时而不是运行时创建一个由两个字节组成的值
- 在"C++代码"部分中,可能会写入两个字节
- 如何封装两个容器之间的传输字节
- 包含消息长度的两个字节标头上的部分recv()呢?
- 如何分别通过 QSslSocket 发送两个字节
- 在java中将两个字节(一个正字节和另一个负字节)合并为短字节
- SDL2_ttf无法呈现长度超过两个字节的字符吗?
- 一次读取两个字节的.dat文件
- C++两个字节上写一个数字
- 如何将 BYTE 数组中的两个字节存储为 int(或类似的东西)
- 将两个字节放在一起
- 如何将两个字节*(秒块)与运算符连接起来'secblock<T, A>::operator+='
- Arduino将整数发送为两个字节,并将其显示在Qt中
- 两个字节合一
- 将单词拆分为两个字节的最快方法
- QByteArray::number(int)只有两个字节长
- 使用std::copy将char数组中的两个字节复制到无符号short中
- 将两个字节转换为16位值的最有效方法
- 为什么CString(LPCTSTR lpsz)构造函数检查lpsz的高两个字节