我可以重新解释演员表,并且大多数时候它被提出来,发出警告,所以我想知道是否还有其他选择(或者当然是重新解释演员表的干净实现)
问问题
747 次
2 回答
4
你没有说给出了什么警告或问题是什么,但转换为char*
withreinterpret_cast
应该可以在没有警告的情况下工作:
unsigned char *a;
const char *b = reinterpret_cast<char*>(a);
于 2012-08-24T14:57:39.523 回答
0
这取决于你想要做什么。
如果您只想以 访问内容,那么在预期a 的上下文中使用char
简单的
或使用该值就可以了。static_cast
char
如果您需要将缓冲区传递给期望 a 的函数char const*
,则 areinterpret_cast
是唯一的解决方案。
如果你想要一个字符串,使用指向缓冲区的指针就可以了:
std::string
bufferToString( unsigned char const* buffer, size_t length )
{
return std::string( buffer, buffer + length );
}
或者您可以复制到现有字符串中:
myString.assign( buffer, buffer + length );
myString.append( buffer, buffer + length );
// etc.
std::copy
可以使用任何需要两个迭代器的字符串函数(或算法,如)。所需要的只是取消引用迭代器会导致类型隐式转换为char
,这是 的情况unsigned char
。
(您不能使用带有缓冲区地址和长度的字符串函数,因为它们不是模板,并且要求缓冲区地址具有 type char const*
。虽然unsigned char
隐式转换为char
,但unsigned char*
需要 areinterpret_cast
将其转换为char*
。)
于 2012-08-24T15:38:49.083 回答