私はキャストを再解釈することができ、ほとんどの場合、それが持ち出され、警告が与えられたので、他の選択肢があるかどうか疑問に思っています(またはもちろん再解釈キャストのクリーンな実装)
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::copy
2 つのイテレータを取る任意の文字列関数 (または のようなアルゴリズム) を使用できます。必要なのは、イテレータを逆参照すると、暗黙的に に変換される型になることだけです。char
これは の場合ですunsigned char
。
(バッファ アドレスと長さを受け取る文字列関数は使用できません。これらはテンプレートではなく、バッファ アドレスが typeである必要があるためchar const*
です。また、unsigned char
暗黙的にに変換する間、に変換するにchar
はunsigned char*
a が必要です。)reinterpret_cast
char*