[解決済み] Qt 5.3でQByteArrayを文字列に変換するにはどうすればよいですか?
質問
いくつかの関数を使って変換しています。
QVector's
まで
QByteArray's
を、例えば。
QByteArray Serialize::serialize(QVector<double> data)
{
QByteArray byteArray;
QDataStream out(&byteArray, QIODevice::WriteOnly);
out << data;
return byteArray;
}
void Serialize::deserialize(QByteArray byteArray, QVector<double> *data)
{
QDataStream in(&byteArray, QIODevice::ReadOnly);
in >> *data;
}
今、私が持っているのは
QByteArray
テキストファイルに入れたいのですが、どのように変換すればいいのでしょうか?
QString
?
一番簡単な方法はもう試しました。
QString myString(data); // data - QByteArray
しかし
myString
は常に空です。
も発見しました。
toStdString()
という関数がドキュメントで紹介されていますが、これは
Qt 5.4
.
を使っています。 Qt 5.3 .
完全な例に従います。
#include <QCoreApplication>
#include <QDebug>
#include <QVector>
#include <QByteArray>
#include <QDataStream>
QByteArray serialize(QVector<double> data)
{
QByteArray byteArray;
QDataStream out(&byteArray, QIODevice::WriteOnly);
out << data;
return byteArray;
}
void deserialize(QByteArray byteArray, QVector<double> *data)
{
QDataStream in(&byteArray, QIODevice::ReadOnly);
in >> *data;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QVector<double> data;
data << 1.1 << 2.2 << 3.3 << 4.4 << 5.5 << 6.6 << 7.7 << 8.8 << 9.9;
QByteArray byteArray = serialize(data);
QVector<double> dataConverted;
deserialize(byteArray, &dataConverted);
qDebug() << "Data:";
qDebug() << data;
qDebug() << "ByteArray:";
QString test(byteArray);
qDebug() << test;
qDebug() << "Data Converted:";
qDebug() << dataConverted;
return a.exec();
}
備考
: を生成することが一般的な目的です。
SQL
のすべての内容を含むファイルです。
SQLite
データベースを使用しています。私のダブルベクターが変換され
QByteArray
として保存され
BLOB
を(serialize 関数を使って)データベースに入れています。データベースから読み込む必要があるときは、deserialize 関数を使って再び double vector に変換しています。ここで、私は
SQL
ファイル内のデータを
BLOB
という形式を使えば、他のデータベースに直接インポートすることができますね。
どのように解決するのですか?
問題は、バイト配列は型にとらわれないデータ型であり、単にメモリ上の個々のバイトの集まりを表していることです。このサンプルコードでは、バイト配列をdoubleのベクトルから作成し、別のdoubleのベクトルに変換しています。問題ありません。
しかし、QStringのコンストラクタにバイト配列を渡すと、QStringはバイト配列を文字列を表すデータ、例えばASCII文字コードの配列として解釈しようとします。
文字列クラスによってはこれを許してしまい、ゴミだらけのインスタンスを作ってしまうかもしれませんが、QStringは基本的なエラーチェックを行い、空の文字列を与えて助けてくれているように見えます。
倍数のバイト配列の内容を出力するコードとしては、あなたが提供したdeserializeメソッドは悪くない例です。
関連
-
[解決済み] QStringをstd::stringに変換する方法は?
-
[解決済み] std::string を const char* または char* に変換する方法
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] C++でintをstringに変換する最も簡単な方法
-
[解決済み] std::stringのインスタンスを小文字に変換する方法
-
[解決済み] std::stringをintに変換するにはどうしたらいいですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み] 配列のベクトルを扱う正しい方法