如何将unsigned char *的内容转换为const char *?

时间:2012-08-24 14:53:08

标签: c++ casting type-conversion

我可以重新解释演员阵容,而且大部分时间都会被提出来,会发出警告,所以我想知道是否还有其他选择(或者当然是重新解释演员的干净实施)

2 个答案:

答案 0 :(得分:3)

您没有说出提供了什么警告或问题是什么,但使用char*投射到reinterpret_cast应该没有任何警告:

unsigned char *a;
const char *b = reinterpret_cast<char*>(a);

答案 1 :(得分:0)

这取决于你想要做什么。

如果您只想以char的形式访问内容,那么就简单了 static_cast或使用期望char的上下文中的值 会做的。

如果需要将缓冲区传递给期望char const*的函数, reinterpret_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的情况。

(你不能使用带有缓冲区地址和字符串的字符串函数 长度,因为这些不是模板,并且需要缓冲区地址 有类型char const*。而unsigned char隐含地转换 到charunsigned char*需要reinterpret_cast来转换它 到char*。)