2016-06-30 3 views
5

Я пытался реплицировать this, но он не компилировался.C++ cast unsigned to signed

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

просто используйте nuke-it '(подписанный символ) x' cast. – pm100

ответ

5

Соответствующая часть из cppreference.com является

Тип наложения спектров

Когда указатель или ссылка на объект, чей динамический тип DynamicType является reinterpret_cast (или С-типа литой) на указатель или ссылка на объект другого типа AliasedType, бросок всегда успешно, но результирующий указатель или ссылка может быть использован для доступа к объекту, если один из следующих верно только:

[...]

  • AliasedType является (возможно, резюме квалифицированных) знаком или без знака вариант DynamicType

[...]

т.е.. вы забыли & из приведенного вами примера.

+1

Не могу поверить, что я пропустил это. Спасибо, что ответили на глупый вопрос. – charmoniumQ

+0

@ На самом деле это не такой глупый вопрос. Мне нужно некоторое время, чтобы понять, почему это не работает без '&', и я все еще не могу объяснить это ... – user463035818

+0

Я думаю, что это так, что назначение выполняется правильно (например, 'reinterpret_cast (x) = 10') , Это вызывает вопрос, что, если вы не хотите эту функциональность? Как вы можете наложить 'reinterpret_cast (f())' без присвоения результата 'f()' временной переменной. – charmoniumQ

Смежные вопросы