2017-11-22 9 views
1

Hoffe jemand kann mir hier helfen. Ziemlich neu zu C (kommen von einem PHP-Hintergrund) und stecken seit einigen Tagen in diesem Problem fest. Immer noch versuchen, Kopf-Runde-Zeiger usw. zu bekommen, eine Freude, die PHP nicht hat.Daten von UART, um ein Array zu aktualisieren

Also, ich möchte in der Lage sein, einen bestimmten Wert innerhalb des Arrays auf einen Wert über den UART zu aktualisieren. Der UART funktioniert alles korrekt. Ich kann den Code einfach nicht zum Aktualisieren des Arrays verwenden. Daten vom UART, werden in der Zeichenkette 'uart' in dem Code unten sein und werden den Wert '0430' haben (die ersten 2 Ziffern beziehen sich auf den Array-Schlüssel und die zweiten beiden sind der Wert, zu dem sie aktualisiert werden sollen).

// Array values 
int unsigned array[15] = {05,76,33,02,11,07,34,32,65,04,09,32,90,03,44}; 

// Split the UART string into required parts 
// Array Key 
int key; 
memcpy (key, &uart[0], 2); 
// New Value 
int value; 
memcpy (value, &uart[2], 2); 

array[key] = value; // Im sure this is wrong and needs to be done via a pointer? 

Das neue Array sollte jetzt: {05,76,33,02,30,07,34,32,65,04,09,32,90,03,44};

Jeder Ratschlag wäre großartig und selbst eine kurze Erklärung wäre hervorragend, um mir zu helfen.

Vielen Dank im Voraus

+1

OT: wissen Sie, '09' illegal ist? Integer-Konstanten, die mit "0" beginnen, sind in oktaler Basis. –

Antwort

3

Sie können die beiden Bytes aus dem String „04“ zu einer int Variable und erwarten, dass es 4. Sie müssen enthalten nicht einfach kopieren Sie die Zeichenfolge „04“ in den Wert 4 konvertieren für Beispiel durch atoi

mit Sie wollen dies:

char uart[] = "0430"; // made up uart buffer just for debugging 
    char temp[3] = { 0 }; // buffer for 2 char string, all 3 bytes initialized to 0 

    temp[0] = uart[0]; 
    temp[1] = uart[1];  // temp contains now "04" 

    int key = atoi(temp); // convert from string to integer, key now contains 4 

    temp[0] = uart[2];  
    temp[1] = uart[3];  // temp contains now "30" 

    int value = atoi(temp); // convert from string to integer, value now contains 30 
+0

Alles funktioniert jetzt - vielen Dank :) – Steveo

Verwandte Themen