1

初歩的な質問があります。uint を 16 進数として Qstring に変換しようとしています。これまでのところは問題ありませんが、文字列の幅を 8 文字の長さにしたいと考えています。過去に Qt を使用せずに setw(8) と setfill('0') を使用しただけですが、Qt には存在しないように見えますか?

そう...

a would be 0000000a
15 would be 00000015

どうすれば簡単にそれを行うことができますか?

私の現在の IntToHex 関数:

void IntToHex(int num_int, QString &num_hex, int width)
{
    uint num_uint = num_int;
    num_hex.setNum(num_uint,16);

    if(num_hex.length()<width)
    {
        for(int i=1; i<=num_hex.length()-width; i++)
            num_hex.insert(0, "0");
    }
}

しかし、これはうまくいきません:/

御時間ありがとうございます :)

4

2 に答える 2

2

私は最近、(テスト目的で) Qt で同等の setw() を探していました。同等のものは、QTextStream の read() メソッドです。ただ、使い方が少し違います。

例として、ファイルに年-月-日 (2014-10-20) のような形式の日付がある場合、その日付を読み取りたいが、年、月、日、 C++ では次のようになります。

if(myfile.is_open())
{
    while (!myfile.eof())
    {
         myfile >> setw(4) >> year >>
              setw(1) >> dummy >>   // separation char
              setw(2) >> month >>
              setw(1) >> dummy >>   // another separation char
              setw(2) >> day;
    }
}


Qt文字列を使用すると、次のようになります。

if (myfile.open(QIODevice::ReadOnly | QIODevice::Text))
{
     QTextStream in(&myfile);
     while( !in.atEnd()){
          year = in.read(4);
          dummy = in.read(1);  // separation char
          month = in.read(2);
          dummy = in.read(1);  // another separation char
          day = in.read(2);
     }
}

または、チャンク全体またはファイルを読み取ってから、データを手動で処理および分割することもできます。すべてのファイル操作が ifstream/ofstream によって作成されたストリームで行われる C++ 標準とは異なり、Qt はそれを 2 つの別々のアクションに分割します。1 つは QFile とそのメソッドによって実行されるファイルへのアクセスで、もう 1 つは以前に開いたファイルのストリームを処理する QTextStream (表示) です。

于 2014-11-15T23:31:16.680 に答える