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

これは、unsignedcharsをcharに変換することを前提としています。それらを再解釈したい場合は、を使用する必要がありますreinterpret_cast。あなたが言うことはまさに行われていることなので、それは完全にきれいでしょう。

0ただし、この例では、配列内のすべての値がからの範囲内にあるため、違いはありませんCHAR_MAXcharしたがって、これらの値は、の場合と同じように表されることが保証されますunsigned char。したがって、それらの値を再解釈することは、それらを変換することと同じです。それよりも大きい値がある場合CHAR_MAX、実装はそれらを異なる方法で処理できます。

于 2010-05-15T16:48:31.427 に答える
7

sstreamを試しましたか?

     stringstream s;
     s << my_txt;

     string str_my_txt = s.str();
于 2010-05-15T16:26:19.130 に答える