2017-02-10 1 views
0

Ich würde gerne wissen, wie ein Element eines Bit-Array in eine Funktion in C-Sprache übergeben. Ich möchte die Funktionsausführung durch dieses "logische" Signal steuern. Meine Idee ist, dass einige Funktion dedicated Element eines Bit-Arrays setzt oder löscht und diese Aktion das Verhalten meiner Funktion ändert, aber ich weiß nicht, wie ich den Funktionsprototyp deklariere (ich kann nicht sagen, welchen Compiler die Funktion erwartet) Bit-Array-Element als eines seiner Argumente). Gibt es jemals einen Trick, wie man einzelne Bit-Array-Elemente in einer C-Sprachenfunktion verwendet? Vielen Dank für Anregungen.Wie Element des Bit-Arrays in Funktion übergeben werden C

+0

eine Reihe von 'foo' in einer Funktion zu nutzen, können Sie immer rufe 'my_function (foo * my_foo)' 'auf und erstelle oder setze' my_foo [x] 'im Körper deiner Funktion. –

+0

Wie viele Bits in Ihrem Bit-Array? – technosaurus

+1

Sie können kein einzelnes "Element eines Bit-Arrays" übergeben, da dies ein bisschen wäre. Sie können eine Ganzzahl übergeben. Wenn in einer Ganzzahl mehr Bits enthalten sind als passen, können Sie einen Zeiger auf das Integer-Array übergeben. Die Funktion sollte die Decodierung der Bits ("die Logik") durchführen. –

Antwort

0

Es klingt wie Sie suchen nach einer generischen Lösung mit Funktionszeigern. Das heißt, einen Funktionszeiger übergeben, der die durchzuführende Aktion bestimmt. Beispiel:

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); 
} 

Wo action_t den Funktionstyp ist, das Verhalten zu bestimmen. Jetzt können Sie implementieren Aktionen wie Bit setzt, löscht Bit, schaltet das Bit, setzen alle Bits etc etc.

Voll Beispiel:

#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; 
} 
Verwandte Themen