From the following
Can I turn unsigned char into char and vice versa?
it appears that converting a basic_string<unsigned char>
to a basic_string<char>
(i.e. std::string
) is a valid operation. But I can't figure out how to do it.
For example what functions could perform the following conversions, filling in the functionality of these hypothetical stou
and utos
functions?
typedef basic_string<unsigned char> u_string;
int main() {
string s = "dog";
u_string u = stou(s);
string t = utos(u);
}
I've tried to use reinterpret_cast
, static_cast
, and a few others but my knowledge of their intended functionality is limited.
Assuming you want each character in the original copied across and converted, the solution is simple
u_string u(s.begin(), s.end());
std:string t(u.begin(), u.end());
The formation of u
is straight forward for any content of s
, since conversion from signed char
to unsigned char
simply uses modulo arithmetic. So that will work whether char
is actually signed
or unsigned
.
The formation of t
will have undefined behaviour if char
is actually signed char
and any of the individual characters in u
have values outside the range that a signed char
can represent. This is because of overflow of a signed char
. For your particular example, undefined behaviour will generally not occur.