![]() |
Prüfsumme berechnen
Dat Ist ein Array of Byte was aber unterschiedlich groß sein kann
C soll die Größe des Arrays sein ETX ein einzelnes Byte die Funktion soll praktisch
Delphi-Quellcode:
usw. rechnen
Dat[1] xor Dat[2] Xor Dat[3] xor ETX
Delphi-Quellcode:
steh aber bei der umsetzung auf dem schlauch zumindes ist das ergebnis falsch
Function TForm1.CalcBCC(Dat : Array of Byte ; C : Integer ; ETX : Byte):Byte;
var I : Integer; begin for I := 2 to C do Begin Result := Dat[1] xor Dat[i]; End; Result := Result xor ETX; end; |
Re: Prüfsumme berechnen
Vielleicht geht es so?
Delphi-Quellcode:
Function TForm1.CalcBCC(Dat : Array of Byte ; C : Integer ; ETX : Byte):Byte;
var I : Integer; begin result :=dat[0]; //<- korregiert for I := 1 to high(dat) do Result := result xor Dat[i]; Result := Result xor ETX; end; ... oder kannst Du mal eine Beispeilsequenz mit einem richtigen Ergebnis posten? Grüße Klaus |
Re: Prüfsumme berechnen
Delphi-Quellcode:
oder
type
TDynByteArray = array of Byte; function ChecksumDyn(const AData: TDynByteArray; AValue: Byte): Byte; var Index: Integer; begin Result := AValue; for Index := Low(AData) to High(AData) do Result := Result xor AData[Index]; end;
Delphi-Quellcode:
oder...
function ChecksumPtr(AData: PByte; ASize: Cardinal; AValue: Byte): Byte;
begin Assert(Assigned(AData) or (ASize = 0)); Result := AValue; while ASize > 0 do begin Result := Result xor AData^; Inc(AData); Dec(ASize); end; end; (kommt darauf an, wie du die Daten verwaltest) |
Re: Prüfsumme berechnen
Ja das Geht Danke
Edit: Nein So
Delphi-Quellcode:
war schon ok
var
I : Integer; begin result := 0; for I := 0 to high(dat) do Result := result xor Dat[i]; Result := Result xor ETX; end; |
Re: Prüfsumme berechnen
Klaus01 hat die 2 Problemchen eigentlich schon gefunden,
Delphi-Quellcode:
auch wenn man etwas noch 'nen winziges bissl optimieren kann
Function TForm1.CalcBCC(Dat : Array of Byte ; C : Integer ; ETX : Byte):Byte;
var I : Integer; begin Result := 0; // initialisieren for I := 0 to High(dat) do Result := Result xor Dat[i]; // mit letzem Wert verknüpfen Result := Result xor ETX; end; (bei XOR ist die Reihenvolge der Verknüpfungen ja egal)
Delphi-Quellcode:
PS: High(dat) hast du doch schon verwendet, wozu willst/mußt du dann die Länge noch als C übergeben? (sie steh doch schon im Array selber mit drin)
type TByteDynArray = Array of Byte;
Function TForm1.CalcBCC(const Dat : TByteDynArray ; ETX : Byte): Byte; var I : Integer; begin Result := ETX; // initialisieren for I := 0 to High(dat) do Result := Result xor Dat[i]; // mit letzem Wert verknüpfen end; [edit] aha, da war also doch was Neues da ... gemeckert aber nich angezeiget -.-'' |
Re: Prüfsumme berechnen
Zitat:
Frage: Kann man ein dynamisches Array der Länge 0 haben? Was macht dan Dein Code? Um richtig zu arbeiten, müßte High(dat)<0 sein! Gammatester |
Re: Prüfsumme berechnen
Zitat:
OK, dann fragen wir einfach noch mit dazu: Wie wird CalcBCC denn verwendet bzw. aufgerufen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz