将 basic_string<unsigned char> 转换为 basic_string<char>,反之亦然
Convert basic_string<unsigned char> to basic_string<char> and vice versa
来自以下
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
和其他几个,但我对它们的预期功能了解有限。
将 转换为 a 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());
假设你想把原文中的每个字符都复制过来转换,解决方法很简单
u_string u(s.begin(), s.end());
std:string t(u.begin(), u.end());
u
的形式对于 s
的任何内容都是直接的,因为从 signed char
到 unsigned char
的转换仅使用模运算。所以不管 char
实际上是 signed
还是 unsigned
.
如果 char
实际上是 signed char
并且 u
中的任何单个字符的值超出 t
的范围,t
的形成将具有未定义的行为=13=] 可以表示。这是因为 signed char
的溢出。对于您的特定示例,通常不会发生未定义的行为。
来自以下
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
和其他几个,但我对它们的预期功能了解有限。
将 转换为 a 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());
假设你想把原文中的每个字符都复制过来转换,解决方法很简单
u_string u(s.begin(), s.end());
std:string t(u.begin(), u.end());
u
的形式对于 s
的任何内容都是直接的,因为从 signed char
到 unsigned char
的转换仅使用模运算。所以不管 char
实际上是 signed
还是 unsigned
.
如果 char
实际上是 signed char
并且 u
中的任何单个字符的值超出 t
的范围,t
的形成将具有未定义的行为=13=] 可以表示。这是因为 signed char
的溢出。对于您的特定示例,通常不会发生未定义的行为。