【发布时间】:2013-02-02 23:20:48
【问题描述】:
我在处理这段代码时遇到了一些问题。 QByteArray::number 应该从哈希中获取 QByteArray 并将其转换为十六进制,但结果比我预期的要短得多。我在想两个输出应该是一样的。我认为这与指针转换有关,但我不明白该转换做得好到足以看到如何进行价值。
谁能解释为什么这两行输出不同的结果?最好用数学术语。
代码
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"
注意:我的实际问题是基数为 36,而不是 16,但有一个方便的 .toHex 方法可以让这更容易显示。
【问题讨论】:
-
猜测,
qlonglong可能是 64 位,这对于容纳 SHA-1 哈希(160 位)来说太小了。 -
JerryCoffin,我忘记了 C++ 编译器假设你知道你在用指针做什么。因此习惯于不允许使用会截断数据的强制转换的语言。