I have an unsigned char array that I need in a std::string, but my current way uses reinterpret_cast which I would like to avoid. Is there a cleaner way to do this?
unsigned char my_txt[] = {
0x52, 0x5f, 0x73, 0x68, 0x7e, 0x29, 0x33, 0x74, 0x74, 0x73, 0x72, 0x55
}
unsigned int my_txt_len = 12;
std::string my_std_string(reinterpret_cast<const char *>(my_txt), my_txt_len);
Use the iterator constructor:
This is assuming that you want the unsigned chars to be converted to char. If you want them to be reinterpreted, then you should use
reinterpret_cast. That would be perfectly clean, since what you say is exactly what is done.In your example, though, it doesn’t make any difference, because all of the values in your array are within the range
0toCHAR_MAX. So it’s guaranteed that those values are represented the same way incharas they are inunsigned char, and hence that reinterpreting them is the same as converting them. If you had values greater thenCHAR_MAXthen implementations are allowed to treat them differently.