reinterpret_castはなしでのstd ::文字列にunsigned char型を取得する方法?
-
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;
}
所属していません StackOverflow