C++ 如何将无符号字符*的内容转换为常量字符*?
我可以跨越reinterpret cast,大多数时候,它被提出时,都会发出警告,所以我想知道是否还有其他替代方案(当然也可以是reinterpret cast的干净实现)你不会说发出了什么警告或者问题出在哪里,但是,使用C++ 如何将无符号字符*的内容转换为常量字符*?,c++,casting,type-conversion,C++,Casting,Type Conversion,我可以跨越reinterpret cast,大多数时候,它被提出时,都会发出警告,所以我想知道是否还有其他替代方案(当然也可以是reinterpret cast的干净实现)你不会说发出了什么警告或者问题出在哪里,但是,使用reinterpret\u cast对char*进行强制转换时,应该不会出现警告: unsigned char *a; const char *b = reinterpret_cast<char*>(a); 无符号字符*a; const char*b=重新解释(a
reinterpret\u cast
对char*
进行强制转换时,应该不会出现警告:
unsigned char *a;
const char *b = reinterpret_cast<char*>(a);
无符号字符*a;
const char*b=重新解释(a);
您没有说明发出了什么警告或问题出在哪里,但是使用重新解释强制转换的char*
应该可以在没有警告的情况下工作:
unsigned char *a;
const char *b = reinterpret_cast<char*>(a);
无符号字符*a;
const char*b=重新解释(a);
这取决于你想做什么
如果您只想以char
的形式访问内容,那么
static\u cast
或在需要char
的上下文中使用该值
我会成功的
如果需要将缓冲区传递给需要字符常量*
的函数,
一个reinterpret\u 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
,即
无符号字符的情况
(不能使用带有缓冲区地址和
长度,因为这些不是模板,需要缓冲区地址
具有类型字符常量*
。而无符号字符
隐式转换
要转换字符
,无符号字符*
需要重新解释\u cast
到char*
)这取决于您试图做什么
如果您只想以char
的形式访问内容,那么
static\u cast
或在需要char
的上下文中使用该值
我会成功的
如果需要将缓冲区传递给需要字符常量*
的函数,
一个reinterpret\u 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
,即
无符号字符的情况
(不能使用带有缓冲区地址和
长度,因为这些不是模板,需要缓冲区地址
具有类型字符常量*
。而无符号字符
隐式转换
要转换字符
,无符号字符*
需要重新解释\u cast
除非你想复制,否则在这里,reinterpret\u cast
听起来像是正确的解决方案。要复制吗?内容怎么样?这就是我想要做的,除非我误解了你的问题。BTW,C++不允许转换没有<代码> RealTytCase<代码>的原因是,如果<代码> char < /C> >是2号的补码,那么对于负数<代码>((无符号CHAR)* RealTytCube(a))!a
:也就是说,将数据读取为char
不同于将其读取为无符号char
。但实际上这个规则是从C继承的,因为在C++中,非I2的补充存在一些问题,IIRC意思是:代码> char < /代码>需要是无符号的。无论如何,没有非二进制的补码C++实现,或者至少没有一个你会使用,所以注意到你可以忘记它…除非你想复制,<代码> RealTytCase< /Cord>这里听起来是正确的解决方案。要复制吗?内容怎么样?这就是我想要做的,除非我误解了你的问题。BTW,C++不允许转换没有<代码> RealTytCase<代码>的原因是,如果<代码> char < /C> >是2号的补码,那么对于负数<代码>((无符号CHAR)* RealTytCube(a))!a
:也就是说,将数据读取为char
不同于将其读取为无符号char
。但实际上这个规则是从C继承的,因为在C++中,非I2的补充存在一些问题,IIRC意思是:代码> char < /代码>需要是无符号的。无论如何,没有非二进制的补码C++实现,或者至少没有一个你会使用,所以注意到这一点你可以忘记它…