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

РЕДАКТИРОВАТЬ:

Чтобы было ясно, я действительно хочу переосмыслить биты в памяти от подписанного до неподписанного. Я пишу библиотеку I2C, которая читает и записывает неподписанные данные, но я использую эту библиотеку для управления датчиками, которые подписаны, поэтому я хочу переосмыслить приведение фактических данных.

1 ответ

Решение

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

Тип псевдонимов

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

[...]

  • AliasedType является (возможно, cv-квалифицированным) подписанным или неподписанным вариантом DynamicType

[...]

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

Другие вопросы по тегам