【发布时间】:2013-10-23 18:01:48
【问题描述】:
我正在尝试从 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 库..
对此的任何帮助将不胜感激..
【问题讨论】:
-
'我这里有什么遗漏吗?'是的,很可能是
const或const_cast<>! -
感谢 g-makulik 的建议...我应该在哪里添加这个演员表?我不想修改我的 FileMapMgr 方法代码。有什么方法可以从我的 for 循环中传递信息以使其工作?
标签: c++ pointers casting char bytearray