У меня есть ситуация, когда я передаю массив, содержащий 2 1 байтовые значения, функции, но почему-то функция считает, что массив имеет длину 4 байта, что испортит мои манипуляции с битами, время. Я даже пробовал явно бросать каждое значение массива как uint8
, но безрезультатно. Любые идеи о том, что может произойти? Использование gcc-инструментов cygwin на Eclipse Mars.1.C преобразование 8-битных значений в 16-битные значения
typedef char uint8; //char is 1 byte in my system.
void setBitArray(uint8 bitArray[], int first, int last, uint8 type) {
if(first >= 0 && last < sizeof(bitArray) * 8) { // If the block is in bounds
...
}
}
...
int main() {
uint8 bitArray[2] = {(uint8)0, (uint8)0};
setBitArray(bitArray, 0,10, 1);
return 0;
}
EDIT
Еще одна вещь. sizeof (bitArray) дает 2 байта в main().
Вы не можете использовать 'sizeof' на массиве параметров. См. [Этот ответ] (https://stackoverflow.com/questions/37538/how-do-determine-the-size-of-my-array-in-c/10349610#10349610). – kaylum
Не 16 бит, а 32 бита –
Я использовал sizeof (array)/sizeof (element) все время, чтобы найти количество элементов. http://stackoverflow.com/questions/37538/how-do-i-deetermine-the-size-of-my-array-in-c – AaronF