将void * hex转换为decimal int

时间:2015-06-30 20:08:42

标签: c++ database sqlite hex converter

您好我需要您的帮助才能将void *(十六进制数)转换为十进制数。我在我的代码中使用sqlite3,回调函数给我一个包含行数的数据。问题是:我需要将&数据(十六进制数)保存为int。也许有另一种方法可以做到这一点,但我尝试将&数据十六进制转换为十进制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; 

1 个答案:

答案 0 :(得分: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_*() functions来读取实际值。)