2013-03-26 9 views
0

У меня есть функция, которая выполняет операцию над массивом из uint8_t длины 32. Я хочу передать ему массив из uint16_t длиной 16 и попросить его выполнить одну операцию в этом массиве побайтно.Как преобразовать массив uint16_t в массив uint8_t?

Я попытался сделать это:

uint8_t byteArray[32]; 
void function(uint16_t *inArray) 
{ 
    byteArray = (uint8_t *) inArray; 
    ... do the byte-by-byte operations on byteArray 
} 

, но я получаю сообщение об ошибке:

incompatible types when assigning to type 'uint8_t[32]' from type 'uint8_t *'

Кто-нибудь знает, что я делаю неправильно?

+1

Я уверен, что 'byteArray' имеет тип, но нам остается загадкой, поскольку вы решили не показывать его. Попробуйте 'uint8_t * byteArray = ....'. Редактировать: Я вижу. Его над фрагментом кода. Предложение все еще стоит. – WhozCraig

ответ

2
uint8_t byteArray[32]; 

Вы не можете назначить byteArray. Это массив, который не модифицируется в C. Вместо этого вы можете использовать указатель или переосмыслить то, что вы делаете: литье в себе - это запах кода, и его следует избегать.

Поскольку вы упоминаете, что у вас есть функция, работающая над этим, было бы лучше, если бы функция принимала параметр, чем с использованием глобального объекта?

+0

+1 (как будто вы не видели этого) – WhozCraig

+0

Разве массив не просто указатель на первый индекс? – w1res

+1

@ w1res Нет, это не так. Указатель и массив представляют собой совершенно разные объекты. Так получилось, что в некоторых контекстах массив преобразуется в указатель на первый элемент. – cnicutar

1

Массив - это набор элементов, он не может быть вписан в C (и даже меньше). Вы можете сделать это с помощью элемента цикла по элементу или переосмыслить то, что вы делаете, чтобы использовать один и тот же тип везде.

Смежные вопросы