Der von die gepostete Code fällt in die zweite von mir angegebene Variante (Konvertieren ind ASCII-Format) und benötigt zwar einige Rechenoperationen, aber er erfüllt seinen Zweck (da der Wert 0x00 nicht mehr auftreten kann) und das ist das WichtigsteEin paar kleine Möglichkeiten zur Optimierung sind mir noch aufgefallen.
1) Die Variable datahexchar wird eigentlich gar nicht gebraucht:
wird zuCode:for(i=4;i>0;i--) { datahexchar[i-1] = hex[data[i-1]]; *Adress = datahexchar[i-1]; Adress++; }
2) Die aufwendigen Multiplikationen und Divisionen lassen sich, weil durch Zahlen dividiert wird welche ein Vielfaches von 2 darstellen, durch Schiebeoperationen ersetzen:Code:for(i=4;i>0;i--) { *Adress = hex[data[i-1]]; Adress++; }
wird zuCode:data[3] = Wert / 4096;
undCode:data[3] = Wert >> 12; // 2¹² = 4096
wird zuCode:Wert = Wert - (data[3] * 4096);
Alternativ lässt sich die Operation meiner Meinung nach auch über den Modulus-Operator anschreiben:Code:Wert = Wert - (data[3] << 12);
Das sind aber nur mehr kleine Anregungen, im Grunde funktioniert deine Lösung jaCode:Wert = Wert % 4096;![]()







Zitieren


Lesezeichen