Преобразование массива 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 флаг, чтобы поймать проблемы, как это.

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