将void*hex转换为十进制int

convert void* hex to decimal int

本文关键字:十进制 int 转换 hex void      更新时间:2023-10-16

你好,我需要你的帮助将void*(十六进制数)转换为十进制数。我在代码中使用sqlite3,回调函数给了我一个&包含行数的数据。问题是:我需要保存&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()/ssqlite3_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_*()函数来读取实际值。)