17

我在 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);
4

3 回答 3

19

使用迭代器构造函数:

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

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

但是,在您的示例中,它没有任何区别,因为数组中的所有值都在 to 范围0CHAR_MAX。因此可以保证这些值的表示方式char与它们在 中的方式相同unsigned char,因此重新解释它们与转换它们相同。如果您的值更大,则CHAR_MAX允许实现以不同方式对待它们。

于 2010-05-15T16:48:31.427 回答
7

你试过流吗?

     stringstream s;
     s << my_txt;

     string str_my_txt = s.str();
于 2010-05-15T16:26:19.130 回答
0
  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;
   }
于 2016-11-11T05:37:32.283 回答