我正在尝试从 C++ 中的字节数组中提取几个字节。我正在使用 ntohs
提取前两个字节,这是我的 schemaId
。所以我创建了FileMapMgr
类中的一个方法,它将使用 ntohs
..
uint16_t newSchemaId;
for (size_t i = 0; i < result->column_count(); ++i) {
cql::cql_byte_t* data = NULL;
cql::cql_int_t size = 0;
result->get_data(i, &data, size);
int index=0;
// this line gives me exception
newSchemaId = FileMapMgr::get_uint16(&data[index]);
index += 2;
flag = false;
}
下面是我从上面的方法调用的 FileMapMgr 类中的方法-
uint16_t FileMapMgr::get_uint16(const char* buffer)
{
if (buffer)
{
return ntohs(*reinterpret_cast<const uint16_t*>(buffer));
}
return 0;
}
下面是我得到的异常 -
error: invalid conversion from cql::cql_byte_t* {aka unsigned char*} to const char* [-fpermissive]
我在这里遗漏了什么吗?
我正在使用 libcql这里是 Cassandra 的图书馆。所以这个 cql::cql_byte_t*
来自 libcql Cassandra 库..
任何帮助将不胜感激..
最佳答案
编译器提示它无法将 cql::cql_byte_t*
转换为 const char*
。这显然是因为 cql::cql_byte_t
别名为 unsigned char
。
您可以在调用方法之前转换指针,或者添加一个新方法来获取 const unsigned char *
。
对于前者:
// this line gives me exception
newSchemaId = FileMapMgr::get_uint16(reinterpret_cast<char *>(&data[index]));
对于后者:
uint16_t FileMapMgr::get_uint16(const unsigned char* buffer)
{
return get_uint16(reinterpret_cast<const char *>(buffer));
}
关于c++ - 从 cql::cql_byte_t* {aka unsigned char*} 到 const char* 的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19549073/