Способ получить неподписанный символ в станд.:: строка без reinterpret_cast?

У меня есть неподписанный массив символов, в котором я нуждаюсь в станд.:: строка, но мой текущий путь использует 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);
17
задан WilliamKF 15 May 2010 в 16:23
поделиться

2 ответа

Используйте конструктор итераторов:

std::string my_std_string(my_txt, my_txt + my_txt_len);

Это предполагает, что вы хотите, чтобы беззнаковые символы были преобразованы в char. Если вы хотите, чтобы они были переинтерпретированы, то вам следует использовать reinterpret_cast. Это было бы совершенно чисто, поскольку то, что вы говорите, именно так и делается.

В вашем примере, однако, это не имеет никакого значения, потому что все значения в вашем массиве находятся в диапазоне от 0 до CHAR_MAX. Поэтому гарантируется, что эти значения представлены в char так же, как и в unsigned char, а значит, их переинтерпретация - это то же самое, что и преобразование. Если у вас были значения, превышающие CHAR_MAX, то реализациям разрешается обращаться с ними по-разному.

19
ответ дан 30 November 2019 в 13:04
поделиться

Вы пробовали sstream?

     stringstream s;
     s << my_txt;

     string str_my_txt = s.str();
7
ответ дан 30 November 2019 в 13:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: