reinterpret_castはなしでのstd ::文字列にunsigned char型を取得する方法?

StackOverflow https://stackoverflow.com/questions/2840835

  •  27-09-2019
  •  | 
  •  

質問

私は避けたいどのreinterpret_castは私がのstd ::文字列に必要なことをunsigned char型の配列が、私の現在の方法の用途を有しています。これを行うにはクリーナーの方法はありますか?

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;
   }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top