hey ich bin neueling und komm gerade mit etwas nicht klar.
Ich habe eine Cheksummenberechnung in Delphi und verstehe nicht wie ich diese in Arduino C schreiben soll.
Vllt. kann mir da jemand weiterhekfen
Kuck mal hier, vielleicht hilft das. Schlaue Menschen haben mich damals auch zum Ziel geführt.
In C sollte das etwa so aussehen:
char *befehl; //parameter?
byte chksum, string_int;
chksum = 0;
while (*befehl)
chksum ^= (byte)*befehl++;
if (chksum==0 || chksum==42) chksum = 85;
Der Code scheint eine Prozedur zu sein, da müßte etwa sowas davorstehen:
function checkSum(befehl: string): byte;
Das sähe dann in C so aus
byte checkSum(char *befehl)
{
... //siehe oben
return chksum;
}
Ich bekomm immer folgende fehlermeldung:
ich glaub ich mach da was mit dem deklarieren falsch
char befehl;
^
checksumme:31: error: no match for 'operator*' (operand type is 'String')
while (*befehl)
^
checksumme:32: error: no match for 'operator++' (operand type is 'String')
chksum = (byte)*befehl++;
^
exit status 1
expected initializer before 'char'
Klar, char ist 1 Zeichen, char* ein Pointer auf Zeichen. Das sind zwei völlig unterschiedliche Datentypen.
In #2 habe ich den Code schon gepostet, das Unterprogramm aus #3 kannst Du noch umbenennen.
Das passt nur für Null-terminierte char Arrays. Die while-Schleife bricht ab wenn der der Terminator erreicht ist. Für Byte-Arrays mit rein binären Daten geht das nicht. Dafür braucht man eine for-Schleife. Auch für C Strings kannst du eine for-Schleife nehmen.
Delphi Strings kennen ihre Länge. In C muß man die Länge von befehl ggf. extra ermitteln, und dann in die Schleife einbauen. Falls dazu strlen() paßt, dann funktioniert auch die kurze while(*befehl) Version.