Способ получить беззнаковый символ в std :: string без reinterpret_cast? - PullRequest
17 голосов
/ 15 мая 2010

У меня есть массив unsigned 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);

Ответы [ 3 ]

19 голосов
/ 15 мая 2010

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

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

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

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

7 голосов
/ 15 мая 2010

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

     stringstream s;
     s << my_txt;

     string str_my_txt = s.str();
0 голосов
/ 11 ноября 2016
  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;
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...