繁体   English   中英

将void *十六进制转换为十进制整数

[英]convert void* hex to decimal int

您好,我需要您的帮助将void *(十六进制数字)转换为十进制数字。 我在代码中使用了sqlite3,回调函数给了我一个&data,其中包含行数。 问题是:我需要将&data(十六进制数字)保存为int。 也许有另一种方法可以执行此操作,但是我尝试将&data十六进制转换为十进制int,问题是要转换void *。 我尝试将void *转换为int,但是将运行时间问题转换为指针。 如果您能帮助我进行转换,我将很高兴。 谢谢。

一些代码-

void* data = nullptr;
rc = sqlite3_exec(db, str.data(), callback, &data, &zErrMsg);
int id = 0;

if (data != nullptr)
{
    int dataa = *((int *)data); // run time error
    istringstream(dataa) >> std::hex >> id; \\ istringstream can't convert void* // NEED CHANGE
}
return id;

回调函数-

if (argc == 0) {
     user_exist = false; return 0;
}
else {
    user_exist = true; 
    if (notUsed != NULL) {
        cout << argv[0] << endl;
       ((int)notUsed) = atoi(argv[0]); 
    }
 }
return 0; 

sqlite3_exec()仅在您可以实际处理回调中的数据时才有用。 实际上,通常应该使用sqlite3_prepare_v2() / sqlite3_step() / sqlite3_finalize()函数来读取数据:

sqlite3_stmt *stmt;
int rc = sqlite3_prepare_v2(db, "SELECT ...", -1, &stmt, NULL);
if (rc != SQLITE_OK) {
    print("error: ", sqlite3_errmsg(db));
    return -1;
}
rc = sqlite3_step(stmt);
if (rc != SQLITE_ROW && rc != SQLITE_DONE) {
    print("error: ", sqlite3_errmsg(db));
} else {
    user_exist = rc == SQLITE_ROW;
}
sqlite3_finalize(stmt);

(对于大多数其他查询,只要获得SQLITE_ROW ,您就可以调用sqlite3_column _ *()函数来读取实际值。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM