我在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);
答案 0 :(得分:19)
使用迭代器构造函数:
std::string my_std_string(my_txt, my_txt + my_txt_len);
这假设您希望将无符号字符转换为char。如果您希望重新解释它们,那么您应该使用reinterpret_cast
。那将是非常干净的,因为你所说的正是所做的。
但是,在您的示例中,它没有任何区别,因为数组中的所有值都在0
到CHAR_MAX
的范围内。因此,可以保证这些值在char
中以unsigned char
中的相同方式表示,因此重新解释它们与转换它们相同。如果您的值大于CHAR_MAX
,则允许实现以不同方式对待它们。
答案 1 :(得分:7)
你试过sstream吗?
stringstream s;
s << my_txt;
string str_my_txt = s.str();
答案 2 :(得分: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;
}