Я хотел бы знать, как передать элемент бит-массива в функцию на языке C. Я хочу контролировать выполнение функции с помощью этого «логического» сигнала. Моя идея в том, что некоторые функции устанавливают или очищают выделенный элемент битового массива, и это действие меняет поведение моей функции, но я не знаю, как объявить прототип функции (я не могу сказать, компилятор, который функция ожидает бит в качестве одного из его аргументов). Есть ли когда-либо какой-либо трюк, как использовать отдельные элементы массива бит в функции языка C? Спасибо за любые предложения.Как передать элемент битового массива в функцию в C
0
A
ответ
0
Похоже, вы ищете какое-то общее решение, используя указатели на функции. То есть, передайте указатель функции, который определяет действие, которое нужно предпринять. Пример:
void bit_change (uint8_t* arr,
size_t byte_index,
size_t bit_index,
action_t* action)
{
arr[byte_index] = action(arr[byte_index], bit_index);
}
Где action_t
- тип функции, определяющий поведение. Теперь вы можете осуществить такие действия, как наборы бит, бит очищает битые клеванты, установить все биты и т.д. и т.п.
Полного пример:
#include <stdint.h>
#include <inttypes.h>
#include <stdio.h>
typedef uint8_t action_t (uint8_t data, size_t bit);
uint8_t bit_set (uint8_t data, size_t bit)
{
return (uint8_t) (data | (1u << bit));
}
uint8_t bit_clear (uint8_t data, size_t bit)
{
return (uint8_t) (data & ~(1u << bit));
}
void bit_change (uint8_t* arr,
size_t byte_index,
size_t bit_index,
action_t* action)
{
arr[byte_index] = action(arr[byte_index], bit_index);
}
void print_array (size_t size, const uint8_t array[size])
{
for(size_t i=0; i<size; i++)
{
printf("%.2"PRIu8 " ", array[i]);
}
printf("\n");
}
int main (void)
{
uint8_t array [5] = {0};
bit_change(array, 0, 2, bit_set);
print_array(sizeof(array), array);
bit_change(array, 0, 2, bit_clear);
print_array(sizeof(array), array);
return 0;
}
использовать массив 'Foo' в функции, вы всегда можете вызовите 'my_function (foo * my_foo)', а затем получите или установите 'my_foo [x]' в пределах тела вашей функции. –
Сколько бит в вашем битовом массиве? – technosaurus
Вы не можете передать индивидуальный «элемент бит-массива», поскольку это будет немного. Вы можете передать целое число. Если бит больше, чем в одном целочисленном, вы можете передать указатель на целочисленный массив. Функция должна выполнять декодирование бит («логика»). –