2016-09-30 3 views
0

I nehmen Daten von seriell Port unten Code verwendet:Schreiben von Daten auf Länge der Array in C++ je

for (sa = 0; sa < 15; sa++) { 
    printf("::%0.2X", buf[sa]); 
} 

I-Daten übernehmen, die wie unten unterschiedliche Länge haben. buf[4] definiert die Länge des Arrays. Zum Beispiel, wenn buf[4] == 07 gibt es 13 Elemente im Array; Wenn buf[4] == 09 gibt es 15 Elemente im Array.

Daten 1: ::02::03::98::00::07::20::16::09::30::13::15::23::B6::

Daten 2: ::02::03::99::00::09::20::16::09::30::13::15::25::23::00::9C

Ich möchte Code schreiben, wie oben und meine ganze Zahl LENGTH von der Länge der buf[] Array variieren wird.

for (sa = 0; sa < LENGTH; sa++) { 
    printf("::%0.2X", buf[sa]); 
} 

Haben Sie eine Idee?

+0

Können Sie erklären, warum die Lösung etwas anderes als die trivial sein sollte 'LÄNGE = buf [4] + 6;'? – nvoigt

+0

Ich habe nicht gedacht. Sie haben Recht, Lösung ist sehr einfach. @ nvoigt – king

Antwort

0

Ich würde sagen:

for(sa=0;sa<buf[4]+5;sa++){ 
    printf("::%0.2X",buf[sa]); 
} 

Wenn Sie jedoch nur zu einem Zeitpunkt ein Element erhalten, können Sie stattdessen tun können:

for(sa=0;sa<4;sa++){ 
    printf("::%0.2X",buf[sa]); 
} 
int length = buf[4] + 1; 
printf("::%0.2X",length); //prints buf[4] 
for(sa=0;sa<length;sa++){ 
    printf("::%0.2X",buf[sa+5]); 
} 
+0

Viele magische Zahlen hier. Schwer zu lesen und zu warten. –

+0

Ich habe gerade den gleichen Stil wie die Frage verwendet – Cantfindname

+0

Es gibt keine 'buf [sa + 5]' in der Frage oder 'buf [4] + 5' –

1

Ändern Sie bitte Ihre LENGTH basierend auf dem Wert von buf[4]

int length = buf[4] + 6; 

Und dann der for-Schleife, die Sie bereits haben.

+0

sollte es sein 'Int Länge = buf [4] + 6;' – king

+0

@ MuhammedYıldız Sie haben Recht, editted es. – DrDonut