Gast
#893127
Ich habe ein Array aus 3 unsigned char Variablen. unsigned char werte[3]; Nun muss ich alle Werte um eins nach links schieben, aber wie mache ich das über die Grenzen des Arrays hinweg?
|
Anzeige
|
Schieben in Arrays
Gast
#893127
Ich habe ein Array aus 3 unsigned char Variablen. unsigned char werte[3]; Nun muss ich alle Werte um eins nach links schieben, aber wie mache ich das über die Grenzen des Arrays hinweg?
Gast
#893147
am besten gar nicht (über die Grenzen hinaus.. :-) ansonsten Variable = 1 1=2 2=3 3=Variable
Gast
#893162
Oh, ich hab mich falsch ausgedrückt, das ganze ist noch komplizierter, ich muss Bitweise scheieben. Ich hab mir auch schon Überlegt das ganze nach unsigned long zu konvertieren, dann zu schieben, und wieder zurück, aber das dauert ja auch lange...
Peter Oder eben doch über eine Union als long. Dann sind 3 Takte notwendig (lsl, rol, rol). OK, der Compiler wird 4 daraus machen, aber das ist trotzdem schneller als die anderen Lösungen. Dazu kommt halt noch das Laden/Zurückschreiben in den Speicher.
Gast
#893185
Hab jetzt nicht so die riesen Erfahrung aber sowas in der Richtung vielleicht: werte[0]= ((werte[0] << 1) | ((werte[1] & 128) >> 7 )); werte[1]= ((werte[1] << 1) | ((werte[2] & 128) >> 7 )); werte[2]= (werte[2] << 1)
Gast
#893226
Gerade eingefallen ... Noch eine Variante ? unsigned char *p; p = (werte + 1); werte[0]= *p; werte[1]= *(p+1); werte[2]= (*(p+2) & 127);
Gast
#893291
Die union Sache hatte ich auch schon probiert, das geht solange es drei Werte sind. Aber was bei 10, oder gar hundert? Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|