我在 QT 项目中使用 GMP,我正在尝试使用 QByteArray 来存储一些数字。
当我想将字节数组转换为 mpz_t 时,我正在执行以下操作:
const char *hexstring = qbyteval.toHex().toStdString().c_str();
mpz_t myval;
mpz_init (myval);
mpz_set_str(myval, hexstring, 16);
mpz_t zero;
mpz_init(zero);
mpz_set_str(zero, "0", 10);
if(mpz_comp(myval, zero) == 0) {
//...set a breakpoint or do something here. This line shouldn't be reached ever.
}
在我的例子中,qbyteval
永远不会为零。如果我在 mpz_comp if block 内设置断点,qbyteval.toHex() 始终仍然是十六进制字符串。
什么地方失败了,导致 hexstring 为空字符串(因此 myval =0)?
最佳答案
这看起来不对:
const char *hexstring = qbyteval.toHex().toStdString().c_str();
c_str()
函数返回一个指向 std::string
中的内部数据的指针,如果您修改或破坏 ,该指针可能会失效>std::string
。在这种情况下,std::string
在该行运行后立即被销毁,因为您没有将它存储在变量中。
您的代码中可能有更多类似这样的错误,但这是最明显的错误。如果您仍然遇到问题,我建议您发布一个最小的完整示例并更好地解释预期行为与实际行为,并使用调试器查看每一行上发生的情况。
关于c++ - QByteArray 转换为十六进制失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43286543/