私はキャストを再解釈することができ、ほとんどの場合、それが持ち出され、警告が与えられたので、他の選択肢があるかどうか疑問に思っています(またはもちろん再解釈キャストのクリーンな実装)
2 に答える
どのような警告が表示されたか、または何が問題であったかはわかりませんが、char*withへのキャストreinterpret_castは警告なしで機能するはずです。
unsigned char *a;
const char *b = reinterpret_cast<char*>(a);
それはあなたがしようとしていることに依存します。
としてコンテンツにアクセスしたいだけの場合は、 aが期待されるコンテキストでchar単純な
static_castまたは値を使用することでうまくいきます。char
を期待する関数にバッファを渡す必要がある場合char const*、 areinterpret_castが唯一の解決策です。
文字列が必要な場合は、ポインターをバッファーに使用しても問題ありません。
std::string
bufferToString( unsigned char const* buffer, size_t length )
{
return std::string( buffer, buffer + length );
}
または、既存の文字列にコピーできます。
myString.assign( buffer, buffer + length );
myString.append( buffer, buffer + length );
// etc.
std::copy2 つのイテレータを取る任意の文字列関数 (または のようなアルゴリズム) を使用できます。必要なのは、イテレータを逆参照すると、暗黙的に に変換される型になることだけです。charこれは の場合ですunsigned char。
(バッファ アドレスと長さを受け取る文字列関数は使用できません。これらはテンプレートではなく、バッファ アドレスが typeである必要があるためchar const*です。また、unsigned char暗黙的にに変換する間、に変換するにcharはunsigned char*a が必要です。)reinterpret_castchar*