c++ - 从 cql::cql_byte_t* {aka unsigned char*} 到 const char* 的无效转换

标签 c++ pointers casting char arrays

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

相关文章:

c++ - 是否可以定义指向引用的指针?

c - 数组和指针的区别

c - 如何将 uint16_t 数组类型转换为 uint8_t 数组?

java - 为什么我需要从 double 转换为 int,而不是相反?

sql - 错误类型强制转换 Postgresql 函数

c++ - 我的 C++ 程序没有跟踪我的 3n+1 最长序列

c++ - 无法找到用 C++ 创建的文件

c++ - 用字符c++初始化二维数组

c++ - 防止在 C++ 中将整数转换为枚举

c++ - 使用指针的二维数组的非访问冲突