2016-06-30 16 views
5

thisを複製しようとしましたが、コンパイルできませんでした。署名付きの署名付きC++キャスト

unsigned char x = 0; 
reinterpret_cast<signed char>(x); 

それは言う

C:\Users\SXG5558\Documents\Arduino\sketch_jun30a\sketch_jun30a.ino: In function 'void setup()': 

sketch_jun30a:3: error: invalid cast from type 'unsigned char' to type 'signed char' 

    reinterpret_cast<signed char>(x); 

            ^

exit status 1 

EDIT:

明確にするために、私は本当に、符号なしに署名したから、メモリ内のビットを再解釈したいです。署名されていないデータを読み書きするI2Cライブラリを作成していますが、そのライブラリを使用して署名されたセンサを制御していますので、実際のデータを再解析する必要があります。

+7

リンクした例は 'reinterpret_cast (x);'です。 '&' – user463035818

+1

あなたの質問のタイトルはあなたのコードに示されているように逆のキャスティング方向を要求するだけではないことに注意してください。 –

+0

は、単にヌークイット '(符号付きchar)x'キャストを使用します。 – pm100

答えて

5

cppreference.comから関連部分は、オブジェクトへのポインタまたは参照に

タイプエイリアシングダイナミック型DynamicTypeあるオブジェクトへのポインタまたは参照はreinterpret_castは(またはCスタイルのキャスト)である

あります異なるタイプのAliasedTypeの場合、常に成功しますが、結果のポインタまたは参照は、次のいずれかの場合にオブジェクトにアクセスするためにのみ使用できます。

[...]

  • AliasedTypeは

すなわち[...](おそらくCV修飾)が署名またはDynamicType

の符号なしの変異体です。あなたはあなたがリンクした例から&を忘れてしまった。

+1

私はそれを逃したとは思えません。愚かな質問にお返事いただきありがとうございます。 – charmoniumQ

+0

@ Sam実際にはそんなに愚かな質問ではありません。私は '&'なしではうまくいかない理由を理解するのに時間が必要でしたが、まだ説明できませんでした... – user463035818

+0

私は、割り当てが適切に行われると思います(例えば 'reinterpret_cast (x)= 10') 。それでは、この機能が欲しいのではないかと疑問を投げかけます。どのように 'f()'の結果を一時変数に代入せずに 'reinterpret_cast (f())'をキャストすることができますか? – charmoniumQ

関連する問題