0

私はキャストを再解釈することができ、ほとんどの場合、それが持ち出され、警告が与えられたので、他の選択肢があるかどうか疑問に思っています(またはもちろん再解釈キャストのクリーンな実装)

4

2 に答える 2

4

どのような警告が表示されたか、または何が問題であったかはわかりませんが、char*withへのキャストreinterpret_castは警告なしで機能するはずです。

unsigned char *a;
const char *b = reinterpret_cast<char*>(a);
于 2012-08-24T14:57:39.523 に答える
0

それはあなたがしようとしていることに依存します。

としてコンテンツにアクセスしたいだけの場合は、 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暗黙的にに変換する間、に変換するにcharunsigned char*a が必要です。)reinterpret_castchar*

于 2012-08-24T15:38:49.083 に答える