来自以下
Can I turn unsigned char into char and vice versa?
似乎将basic_string<unsigned char>
转换为basic_string<char>
(即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);
}
我尝试使用reinterpret_cast
,static_cast
和其他一些人,但我对其预期功能的了解有限。
答案 0 :(得分:5)
假设您希望复制原始文件中的每个字符并进行转换,解决方案很简单
u_string u(s.begin(), s.end());
std:string t(u.begin(), u.end());
u
的任何内容都可以直接形成s
,因为从signed char
转换为unsigned char
只是使用模运算。因此char
实际上是signed
或unsigned
。
如果t
实际为char
且signed char
中的任何单个字符的值超出范围{{1},则u
的形成将具有未定义的行为可以代表。这是因为signed char
的溢出。对于您的特定示例,通常不会发生未定义的行为。
答案 1 :(得分:1)
将basic_string<T>
basic_string<U>
投射到任何其他T
并非合法转换为U
,即使将basic_string<unsigned char> str(
static_cast<const unsigned char*>(char_string.c_str()),
char_string.size());
投放到{{1}}是合法的。对于几乎所有模板类型都是如此。
如果你想创建一个新的字符串,它是原始的,不同类型的副本,那很容易:
{{1}}