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
[...]
то есть. ты забыл &
из приведенного вами примера.