Способ получить unsigned Char в STD :: string без ReinterPret_cast?

StackOverflow https://stackoverflow.com/questions/2840835

  •  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;
   }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top