checksumme berechnen

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.