web-dev-qa-db-ja.com

reinterpret_castなしでunsignedcharをstd :: stringに入れる方法は?

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);
17
WilliamKF

イテレータコンストラクタを使用します。

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より大きい値がある場合、実装はそれらを異なる方法で処理できます。

19
Steve Jessop

Sstreamを試しましたか?

     stringstream s;
     s << my_txt;

     string str_my_txt = s.str();
7
  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;
   }
0
Praveer Kumar