您好我需要您的帮助才能将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;
答案 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来读取实际值。)