1

我正在尝试从 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]

我在这里有什么遗漏吗?

我在这里为 Cassandra 使用libcql库。所以这cql::cql_byte_t*是来自 libcql Cassandra 库..

对此的任何帮助将不胜感激..

4

1 回答 1

1

编译器抱怨它无法将 a 转换cql::cql_byte_t*const char*. 这显然是因为 acql::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));
}
于 2013-10-23T18:57:00.057 回答