هل من الصعب حساب حجم QByteArray؟
-
26-12-2019 - |
سؤال
لقد قمت مؤخرًا بالبرمجة للقيام بنقل الملفات باستخدام Qt.اعتقدت أن الأمر نجح الآن، وما زلت أشعر بالفضول بشأن ما حدث.الرجاء مساعدتي في معرفة السبب.تشكرات.
لماذا يكون حجم الرأس أكبر من مجموع sizeof(qin32) وsizeof(qint32) وطول اسم الملف؟ (أعتقد أن هذا هو سبب الوظيفة - setVersion())
QFileInfo info(file_to_send.fileName());
QByteArray head;
QDataStream out(&head, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_0);
out << qint32(file_to_send.size() + info.fileName().length() + sizeof(qint32)*2)
<< qint32(info.fileName().length())
<< info.fileName();
tcpClient.write(head);
المحلول
لقد جعلتها معقدة.النمط مثل هذا:
giveacodicetagpre.وقراءة التعليمات البرمجية:
giveacodicetagpre.نصائح أخرى
info.filename()
يكتب طوله الخاص
إذا كنت لا تريد ذلك فيمكنك أن تفعل
QFileInfo info(file_to_send.fileName());
QByteArray head;
QDataStream out(&head, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_0);
QByteArray filename = info.fileName().toLatin1();
out << qint32(file_to_send.size() + filename .length() + sizeof(qint32)*2);
<< qint32(filename .length())
out.writeRawData(fileName.constData(), filename.length());
tcpClient.write(head);
استخدام writeRawData
الذي يتجاوز أي ترميز مدمج
لا تنتمي إلى StackOverflow