2016-06-30 11 views
5

Ho provato a replicare this ma non si compila.Il cast di C++ non è firmato per la firma

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

Dice

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:

Per essere chiari, io davvero voglia di reinterpretare i bit in memoria dal sottoscritto a segno. Sto scrivendo una libreria I2C che legge e scrive dati non firmati, ma sto usando quella libreria per controllare i sensori che sono firmati, quindi voglio reinterpretare i dati reali.

+7

l'esempio collegato ha 'reinterpret_cast (x);'. Nota '&' – user463035818

+1

Non è il titolo della domanda che richiede la direzione di lancio opposta come mostrato nel codice? –

+0

usa il cast di nuke-it '(firmato char) x'. – pm100

risposta

5

La parte pertinente cppreference.com è

Tipo aliasing

Quando un puntatore o riferimento all'oggetto cui dinamica tipo è DynamicType è reinterpret_cast (o cast di tipo C) per un puntatore o riferimento all'oggetto di tipo diverso AliasedType, il cast riesce sempre, ma il puntatore risultante o di riferimento può essere utilizzato solo per accedere all'oggetto se una delle seguenti condizioni:

[...]

012.
  • AliasedType è il (possibilmente cv qualificata) firmato o variante senza segno di DynamicType

[...]

esempio. hai dimenticato il & dell'esempio che hai collegato.

+1

Non posso credere di averlo perso. Grazie per aver risposto a una domanda stupida. – charmoniumQ

+0

@ Sam in realtà non è una domanda così stupida. Avevo bisogno di un po 'di tempo per capire perché non funziona senza '&' e non riesco ancora a spiegarlo ... – user463035818

+0

Penso che sia così che l'assegnazione venga eseguita correttamente (ad esempio 'reinterpret_cast (x) = 10') . Questo pone la domanda, cosa succede se non vuoi questa funzionalità? Come puoi lanciare 'reinterpret_cast (f())' senza assegnare il risultato di 'f()' a una variabile temporanea. – charmoniumQ

Problemi correlati