このコードで問題が発生しています。QByteArray :: numberはハッシュからQByteArrayを取得し、それを16進数に変換する必要がありますが、結果は予想よりもはるかに短くなります。私は両方の出力が同じであるべきだと思っていました。ポインタキャストと関係があると思いますが、そのキャストがどのように評価されているかを理解するのに十分な成果を上げているのかわかりません。
これらの2つの行が異なる結果を出力する理由を誰かが説明できますか?できれば数学的に。
コード
QCryptographicHash hash(QCryptographicHash::Sha1);
hash.addData("some string to hash");
qDebug() << QByteArray::number(*(qlonglong*)hash.result().data(), 16);
qDebug() << hash.result().toHex();
出力:
"89bde3ca56c83c47"
"473cc856cae3bd89e43ff9f62963d6f38372ccbd"
期待される出力:
"473cc856cae3bd89e43ff9f62963d6f38372ccbd"
"473cc856cae3bd89e43ff9f62963d6f38372ccbd"
注:私の実際の問題は16進数ではなく36進数にありますが、これをはるかに簡単に表示できるようにするための.toHexメソッドが便利にありました。