Std :: stringに必要なunsignedchar配列がありますが、現在の方法では、避けたい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);
これは、unsignedcharsをcharに変換することを前提としています。 want再解釈する場合は、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;
}