C++ 转换基本字符串<;无符号字符>;到基本字符串<;char>;反之亦然
从下面 似乎将C++ 转换基本字符串<;无符号字符>;到基本字符串<;char>;反之亦然,c++,string,casting,unsigned-char,C++,String,Casting,Unsigned Char,从下面 似乎将basic_字符串转换为basic_字符串(即std::string)是有效的操作。但我不知道怎么做 例如,哪些函数可以执行以下转换,填充这些假设的stou和utos函数的功能 typedef basic_string<unsigned char> u_string; int main() { string s = "dog"; u_string u = stou(s); string t = utos(u); } typedef基本字符串u
basic_字符串
转换为basic_字符串
(即std::string
)是有效的操作。但我不知道怎么做
例如,哪些函数可以执行以下转换,填充这些假设的stou
和utos
函数的功能
typedef basic_string<unsigned char> u_string;
int main() {
string s = "dog";
u_string u = stou(s);
string t = utos(u);
}
typedef基本字符串u字符串;
int main(){
字符串s=“dog”;
u_字符串u=stou(s);
字符串t=utos(u);
}
我曾尝试使用
重新解释
、静态
,以及其他一些方法,但我对其预期功能的了解有限。将基本
字符串转换为任何其他基本
字符串并不是合法的转换,即使将T
转换为U
是合法的。几乎每种模板类型都是如此
如果要创建不同类型的原始字符串的副本,很容易:
basic_string<unsigned char> str(
static_cast<const unsigned char*>(char_string.c_str()),
char_string.size());
basic\u字符串str(
静态转换(char\u string.c\u str()),
char_string.size());
假设您希望复制并转换原始字符中的每个字符,解决方案很简单
u_string u(s.begin(), s.end());
std:string t(u.begin(), u.end());
对于s
的任何内容,u
的形成都是直接的,因为从有符号字符
到无符号字符
的转换仅使用模运算。因此,无论char
实际上是signed
还是unsigned
,这都会起作用
如果
char
实际上是signed char
并且u
中的任何单个字符的值超出了signed char
可以表示的范围,则t
的形成将具有未定义的行为。这是因为有符号字符
溢出。对于您的特定示例,未定义的行为通常不会发生。您想要什么类型的转换?@JonathanPotter通过上述代码中从s
到t
的转换来保留[a-Za-z0-9]
字符的任何东西。ustring u(s.begin(),s.end())代码>FWIW-完整代码。(我正在检查是否不需要Nicol回答中的static_cast
)