Преобразование массива uchar в указатель типа uint8
Я хочу конвертировать массив uchar в указатель uint8. Поскольку оба имеют 8 битов и диапазоны значений от 0 до 255, я не думаю, что это должно быть причиной и проблемой.
uchar list[100];
Я должен передать вышеупомянутый список функции, которая принимает указатель на uint8t. Могу ли я передать это так:
(uint8t *)list
так что это не повлияет на значение, когда я прочитал его как uint8.
1 ответ
Что ж, uchar
а также uint8_t
не обязательно одинаковой ширины! Технически, персонаж может иметь ширину 16 бит. Это редкость, но бывает, особенно во встроенном мире. Таким образом, uchar может быть не 8-битным, но uint8 всегда 8-битным.
Если uchar
это действительно не байт, то приведение от uchar []
в uint8_t *
устраняет ограничения выравнивания. Для платформ, которые не поддерживают пропущенный доступ (пахнет как встроенный снова!), Попытка приведения подобным образом была бы ошибкой. Если вы компилируете с GCC
, добавлять -Wcast-align
флаг, чтобы поймать проблемы, как это.