如何在没有reinterpret_cast的情况下将unsigned char转换为std :: string?

Wil*_*mKF 17 c++ stdstring reinterpret-cast

我在std :: string中有一个unsigned char数组,但我目前的方法是使用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);
Run Code Online (Sandbox Code Playgroud)

Ste*_*sop 19

使用迭代器构造函数:

std::string my_std_string(my_txt, my_txt + my_txt_len);
Run Code Online (Sandbox Code Playgroud)

这假设您希望将无符号字符转换为char.如果你重新解释它们,那么你应该使用reinterpret_cast.那将是非常干净的,因为你所说的正是所做的.

在你的榜样,但是,它并没有什么差别,因为所有的数组中的值都在范围之内0CHAR_MAX.因此,可以保证这些值的表示方式char与它们相同unsigned char,因此重新解释它们与转换它们相同.如果您的值大于,则CHAR_MAX允许实现以不同方式对待它们.


Rob*_*boy 7

你试过sstream吗?

     stringstream s;
     s << my_txt;

     string str_my_txt = s.str();
Run Code Online (Sandbox Code Playgroud)

  • 事实证明我只是幸运,在某些情况下,丢失的终止NULL会导致ABR.请在此处查看相关问题:http://stackoverflow.com/questions/2889074/why-do-i-get-this-strange-output-behavior (2认同)