从cql::cql_byte_t*{aka unsigned char*}到const char的转换无效* 我试图从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; }

从cql::cql_byte_t*{aka unsigned char*}到const char的转换无效* 我试图从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; },c++,pointers,casting,char,bytearray,C++,Pointers,Casting,Char,Bytearray,这里有我遗漏的东西吗 我在用卡桑德拉的图书馆。所以这个cql::cql\u byte\u t*来自libcql-Cassandra库 如果有任何帮助,我们将不胜感激。编译器抱怨它无法将cql::cql\u byte\u t*转换为const char*。这显然是因为cql::cql\u byte\u t被别名为无符号字符 您可以在调用该方法之前强制转换指针,或者添加一个新方法以获取常量unsigned char* 对于前者: // this line gives me excep

这里有我遗漏的东西吗

我在用卡桑德拉的图书馆。所以这个
cql::cql\u byte\u t*
来自libcql-Cassandra库


如果有任何帮助,我们将不胜感激。

编译器抱怨它无法将
cql::cql\u byte\u t*
转换为
const char*
。这显然是因为
cql::cql\u byte\u t
被别名为
无符号字符

您可以在调用该方法之前强制转换指针,或者添加一个新方法以获取
常量unsigned char*

对于前者:

        // this line gives me exception
        newSchemaId = FileMapMgr::get_uint16(reinterpret_cast<char *>(&data[index]));
//这一行给了我异常
newSchemaId=FileMapMgr::get_uint16(重新解释强制转换(&data[index]);
对于后者:

uint16_t FileMapMgr::get_uint16(const unsigned char* buffer)
{
    return get_uint16(reinterpret_cast<const char *>(buffer));
}
uint16\u t FileMapMgr::get\u uint16(const unsigned char*buffer)
{
返回get_uint16(重新解释强制转换(缓冲区));
}

编译器抱怨它无法将
cql::cql\u byte\u t*
转换为
const char*
。这显然是因为
cql::cql\u byte\u t
被别名为
无符号字符

您可以在调用该方法之前强制转换指针,或者添加一个新方法以获取
常量unsigned char*

对于前者:

        // this line gives me exception
        newSchemaId = FileMapMgr::get_uint16(reinterpret_cast<char *>(&data[index]));
//这一行给了我异常
newSchemaId=FileMapMgr::get_uint16(重新解释强制转换(&data[index]);
对于后者:

uint16_t FileMapMgr::get_uint16(const unsigned char* buffer)
{
    return get_uint16(reinterpret_cast<const char *>(buffer));
}
uint16\u t FileMapMgr::get\u uint16(const unsigned char*buffer)
{
返回get_uint16(重新解释强制转换(缓冲区));
}

“这里有我遗漏的东西吗?”是的,很可能是
常量
常量
!谢谢g-makulik的建议。。。我应该在哪里添加此铸件?我不想修改FileMapMgr方法代码。。有什么方法可以让我的for循环传递信息以使其工作吗?“我这里缺少什么吗?”是的,很可能是
const
const\u cast
!谢谢g-makulik的建议。。。我应该在哪里添加此铸件?我不想修改FileMapMgr方法代码。。我们有没有办法从我的for循环中传递信息以使其工作?非常感谢jxh的建议。。我可以用你上面的建议,对吗?我想用你给我举的前一个例子。。我不倾向于更改FileMapMgr代码。。让我试试这个。。谢谢。是的,两种都可以。但是第二个不是改变原来的功能,而是增加一个新的功能。非常欢迎。非常感谢jxh的建议。。我可以用你上面的建议,对吗?我想用你给我举的前一个例子。。我不倾向于更改FileMapMgr代码。。让我试试这个。。谢谢。是的,两种都可以。但是第二个不是改变原来的功能,而是增加一个新的功能。不客气。