ファイルからデータを読み取り、生データを 2 桁の 16 進文字列として表示しようとしています。
私は Qt フレームワーク、特に QTextEdit を使用しています。
私はさまざまなアプローチを試し、やりたいことをほぼ達成しましたが、何も知らない予期しないエラーがいくつかあります。
現在、これは私の実装です:
1) データを読み込みます。
ifstream file (filePath, ios::in|ios::binary|ios::ate);
if (file.is_open())
{
size = file.tellg();
memblock = new char [size+1];
file.seekg(0, ios::beg);
file.read(memblock, size);
file.close();
}
2) 使用される単一の QString を作成します (QTextEdit には QString が必要なため)。
QString s;
3) 配列をループして、連続する各文字を QString に追加します。
int count = 0;
for(i=0;i<size;i++)
{
count++;;
s.append(QString::number(memblock[i], 16).toUpper());
s.append("\t");
if (count == 16)
{
s.append("\n");
count -= 16;
}
}
これで問題なく動作しますが、文字に到達した場合を除いて、次FF
のように表示されますFFFFFFFFFFFFFFFF
だから私の主な質問は次のとおりです。
- 「FF」の文字だけが「FFFFFFFFFFFFFFFF」と表示されるのはなぜですか?
- QString::number を使用せずに char データを base 16 文字列に変換する方法はありますか?
この実装をできるだけ高速にしたいので、sprintf のようなものが機能する場合は、QString::number よりも高速であると推測されるので、お知らせください。