2009-03-18 3 views
61

C++スタイルのキャスト*

unsigned char *foo(); 
std::string str; 
str.append(static_cast<const char*>(foo())); 

エラー:invalid static_cast from type ‘unsigned char*’ to type ‘const char*’

C++スタイルでここにキャストするための正しい方法は何ですか?あなたが間にキャストされている2つのタイプとしてreinterpret_cast<>を使用する必要があります

+3

unsigned char型は、一般的にはUnicode形式の文字列を保持するために使用されてきた、あなたは直接ではなく内容を変換し、それをキャストしたいあなたは確かにありますか? –

答えて

39

reinterpret_castは

+36

お願いしますか? –

+5

@ jesses.co.tt downvoteありがとうございます。この投稿の重要な特徴は、それがupvotedになるのは、その適時性です。他の答えは様々な詳細を提供し、別々に読んだり、上書きしたりするのが最適です。 [@JaredPars answer](http://stackoverflow.com/a/658924/11635)があなたが探しているものをカバーしているなら、私はそれを使用したいと思います。あなたは、私もそれらのフォーマットを改善するために時間を費やしたことに気付くでしょう。私は本当にこの答えを他のものの内容を包含するように拡大するという点を見ていない。 –

+1

私はあなたが理性的だと理解しており、ページ全体として取っていますが、私は再結論する必要はないと同意します...時間を取ってページ全体とタイムスタンプを見るのは難しいと思います自分のメリットで各回答を判断する...しかし、(私からの評判が55倍以上ある人から特に)取られた点 –

6

は互いに無関係です。

39

reinterpret_cast

unsigned char *foo(); 
std::string str; 
str.append(reinterpret_cast<const char*>(foo())); 
51

char *const unsigned char *を試してみては無関係な種類と考えられています。したがって、reinterpret_castを使用します。

しかし、あなたは非const型にconst unsigned char*から行っていた場合は、最初const_castを使用する必要があるだろう。 reinterpret_castconstまたはvolatile資格をキャストできません。

15

unsigned char *は基本的にバイト配列であり、文字列ではなく生データを表すために使用する必要があります。ユニコード文字列は、wchar_t *

と表されます。C++標準によると、unsigned char *とchar *の間のreinterpret_castは、サイズが同じで、構造と制約が同じで安全です。私はreintrepret_castを一般的なconst_castよりももっと避けようとしています。

スタティックキャストが失敗した場合は、C + +を使用している場合は「プラスプラス」の部分が提供するものを利用し、文字列クラスとSTL(別名STL std ::のbasic_stringはあなたのために良い仕事かもしれません)

-3

Hope it help. :)

const unsigned attribName = getname(); 
const unsigned attribVal = getvalue(); 
const char *attrName=NULL, *attrVal=NULL; 
attrName = (const char*) attribName; 
attrVal = (const char*) attribVal; 
+6

Downvote:あまり便利ではなく、間違いなくC++の方法ではありません。 – Lstor

関連する問題