将未符号char放入std :: string的方法没有retinterpret_cast?
-
27-09-2019 - |
题
我有一个未签名的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);
解决方案
使用迭代器构造函数:
std::string my_std_string(my_txt, my_txt + my_txt_len);
这是假设您希望将未签名的字符转换为char。如果你 想 它们要重新解释,然后您应该使用 reinterpret_cast
. 。那将是完全干净的,因为您说的恰恰是所做的。
但是,在您的示例中,它没有任何区别,因为数组中的所有值都在该范围内 0
到 CHAR_MAX
. 。因此,可以保证这些值以相同的方式表示 char
当他们在 unsigned char
, 因此,重新解释它们与转换它们相同。如果您的价值更大,那么 CHAR_MAX
然后,允许实施以不同的方式对待它们。
其他提示
您尝试过Sstream吗?
stringstream s;
s << my_txt;
string str_my_txt = s.str();
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;
}
不隶属于 StackOverflow