Большинство преобразований между типами char
, signed char
, unsigned char
, int8_t
и uint8_t
можно считать безопасными. Это типы символов и имеют различные специальные исключения, которые делают их более "защищенными", чем другие типы.
В частности, типы символов:
- Не может быть смещено.
- Не может содержать биты заполнения или представления прерываний.
- Есть исключения из действующего типа / строгих правил наложения имен.
- Всегда имеют размер 1 байт.
Это означает, что вы можете выполнять всевозможные дикие преобразования между различными типами символов. За некоторыми исключениями:
- При переходе от неподписанного к подписанному типу данные могут не совпадать, и вы перезапишете бит знака. Это может привести к ошибкам.
- Опасно «отбрасывать» квалификаторы
const
или volatile
, если они присутствуют.
Поэтому можно безопасно преобразовать из uint8_t*
в char*
и отменить ссылку на данные как другой тип, (char*)uartRX_data
. Особенно, если вы знаете, что массив uint8_t
содержит допустимые 7-битные символы только с MSB, который никогда не устанавливается, и с нулевым окончанием в конце массива.