私はバッファで作業しており、そこから文字列を取得しようとしていますが、機能していません...
例:
*void myFunc(QDataStream& in)
{
quint8 v;
in >> v;
// Ok, I caught v value successfuly
QString s;
in >> s;
// Didnt work :<
}*
文字列の長さは最初の 2 バイトに格納されます...
ありがとう
私はバッファで作業しており、そこから文字列を取得しようとしていますが、機能していません...
例:
*void myFunc(QDataStream& in)
{
quint8 v;
in >> v;
// Ok, I caught v value successfuly
QString s;
in >> s;
// Didnt work :<
}*
文字列の長さは最初の 2 バイトに格納されます...
ありがとう
文字列が として書かれていない場合は、QString
その長さと内容を別々に読み取る必要があります。
quint8 v;
in >> v;
quint16 length = 0;
in >> length;
// the string is probably utf8 or latin
QByteArray buffer(length, Qt::Uninitialized);
in.readRawData(buffer.data(), length);
QString string(buffer);
16 ビット長を読み取る前に、 QDataStream
with のエンディアンを変更する必要がある場合があります。QDataStream::setByteOrder
コードの記述と QDataStream の作成方法を実際に確認する必要があります。次のサンプルを試してみましたが、この場合、関数は非常にうまく機能します。
#include <QCoreApplication>
#include <QDebug>
#include <QDataStream>
#include <QBuffer>
void myFunc(QDataStream& in)
{
quint8 v;
in >> v;
qDebug() << v;
// Ok, I caught v value successfuly
QString s;
in >> s;
qDebug() << s;
// Didnt work :<
}
int main(int argc, char ** argv) {
QCoreApplication a(argc, argv);
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
// write test data into the buffer
QDataStream out(&buffer);
quint8 ival = 42;
QString sval = "Qt";
out << ival;
out << sval;
// read back data
buffer.seek(0);
myFunc(out);
return a.exec();
}
実行時の出力:
$ ./App
42
"Qt"