Способ получить unsigned Char в STD :: string без ReinterPret_cast?
-
27-09-2019 - |
Вопрос
У меня есть unsigned Char Array, который мне нужен в std :: string, но мой нынешний путь использует ReinterPret_cast, который я хотел бы избежать. Есть ли более чистый способ сделать это?
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);
Решение
Используйте конструктор iTerator:
std::string my_std_string(my_txt, my_txt + my_txt_len);
Это предполагает, что вы хотите преобразовать unsigned Clans для Char. если ты хочу их переосмысливать, тогда вы должны использовать reinterpret_cast
. Отказ Это было бы совершенно чисто, так как вы говорите, это именно то, что сделано.
В вашем примере, хотя он не имеет никакого значения, потому что все значения в вашем массиве находятся в пределах диапазона 0
к CHAR_MAX
. Отказ Так что это гарантировано, что эти значения представлены так же в char
как они в unsigned char
, И, следовательно, это переосмысление их такое же, как их преобразование. Если у вас были значения больше, чем CHAR_MAX
Затем реализации разрешаются обращаться с ними по-разному.
Другие советы
Вы пробовали SSTream?
stringstream s;
s << my_txt;
string str_my_txt = s.str();
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char temp = 200;
char temp1[4];
sprintf(temp1, "%d", temp);
std::string strtemp(temp1);
std::cout<<strtemp.c_str()<<std::endl;
return 0;
}