Подтвердить что ты не робот

Способ получения без знака char в std::string без reinterpret_cast?

У меня есть массив без знака char, который мне нужен в 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);
4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

     stringstream s;
     s << my_txt;

     string str_my_txt = s.str();

Ответ 3

  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;
   }