0

我可以重新解释演员表,并且大多数时候它被提出来,发出警告,所以我想知道是否还有其他选择(或者当然是重新解释演员表的干净实现)

4

2 回答 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_castchar

如果您需要将缓冲区传递给期望 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 回答