c++ - QByteArray 转换为十六进制失败

标签 c++ qt gmp

我在 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/

相关文章:

c++ - 使用平假名将 std::wstring 转换为 QString

c++ - 与 MPIR 相比,GMP 有什么优势吗?

c++ - 以 10 为基数打印 4294967296 整数

c++ - 从纯抽象基类继承 typedef

c++ - CLion 和 Qt5 : tuning qmake

c++ - 如何删除 vector 中的元素。 (删除无效)

c++ - 长双字符串

c++ - 将专用插槽连接到 QGraphicsItem 中的 QAction

c - 这是 GMP 4.1.2 中的错误还是我做错了什么?

c++ - 为什么在调用 localtime() 函数之前不需要 malloc struct tm 指针?