Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   XOR Verknüpfung, wie? (https://www.delphipraxis.net/63677-xor-verknuepfung-wie.html)

Klaus01 22. Feb 2006 07:13

Re: XOR Verknüpfung, wie?
 
Zitat:

Also ich bin nun fast fertig. Nur die Ergebnisse hauen noch nicht so hin

wieso kann ich denn nicht

Delphi-Quellcode:
vString:=GetString();
  strSN:=GrobPath1(vString);
  intSN:=StrToInt(strSN);
  Ergebnis:= IntToHex(ord(intSN[1]),2) xor IntToHex(ord(intSN[2]),2).... // geht so nicht!
  WriteString();
  Checksum:=IntToHex(Ergebnis,2);

Wieso bringt der da einen Fehler? Irgendsoetwas mir Array.

Wichtig ist, dass ich den die Zahl(123456) die ja ein String ist in die einzelnen Ziffern aufteilt und dann diese einzelnen Ziffern in einen Hexwert(Ascii) umwandelt und dann xor verknüpfe.

Habt Ihr da ne Lösung?
IntToHex liefert Dir einen String mit den HexDigits und nicht den Ascii-Wert des Zeichens.
Aus der Hilfe:
Zitat:

function IntToHex(Value: Integer; Digits: Integer): string; overload;
Um die Zeichen mit XOR zu verknüpfen müssen diese in ihrem Ascii Wert verknüpft werden
Aus der Hilfe:
Zitat:

xor bitwise xor integer integer X xor Y
Grüße
Klaus

DoktorD 22. Feb 2006 07:15

Re: XOR Verknüpfung, wie?
 
So wie du es jetzt vorschlägst hatte ich es auch gedacht.
Aber die Leerzeichen (0x20) und das <STX> (0x02) gehen ja auch zu Checksummen Berechnung ein.
Funktioniert das dann auch?

Die CS brauche ich in HEX. Das kann ich leider nicht ändern

Klaus01 22. Feb 2006 07:22

Re: XOR Verknüpfung, wie?
 
in dem Code vom Sharky werden die Leerzeiche auch mit XOR verknüpft, denn
sie werden ja nirgends ausgefiltert.


Grüße
Klaus

DoktorD 22. Feb 2006 07:24

Re: XOR Verknüpfung, wie?
 
OK. Mit den Leerzeichen das funktioniert. Ich brauch jetzt nur noch das <STX> mit in die Berechnung einfließen zu lassen.

Schaut mal unter

http://www.torsten-horn.de/techdocs/ascii.htm

da steht bei STX : STX^B

Kann ich das so einfach reinschreiben?

oder kann ich auch "ord(<STX>)" nehmen. Geht das überhaupt?

Klaus01 22. Feb 2006 07:31

Re: XOR Verknüpfung, wie?
 
Hier der angepasste Code vom alzaimar
wenn Du STX als Startwert nimmst, wird STX auch in der Checksummer auftauchen.

Grüße
Klaus

Delphi-Quellcode:
Function CheckSum (Const aString : String) : String;
Var
  i : Integer;
  r :Byte;
 
Begin
  If Length (aString)=0 Then
    r := 0
  Else Begin
     
    r := 2; //STX ^B
    For i:=1 To Length (aString) Do
      r := r xor Ord (aString[i]);
    End;
  Result := IntToHex (r,2);
End;

DoktorD 22. Feb 2006 07:49

Re: XOR Verknüpfung, wie?
 
Es funktioniert.

Vielen, vielen Dank an alle, die mir geholfen haben. Ich ziehe den Hut vor Euch!!!!

Sharky 22. Feb 2006 08:02

Re: XOR Verknüpfung, wie?
 
Zitat:

Zitat von DoktorD
Es funktioniert.

Hai DoktorD,

einen kleinen Tipp habe ich noch. Versuche solche Funktionen ersteinmal allgemein zu halten und dann in einer zweiten Funktion die besonderen Randbedingungen vorzugeben. Dadurch ereichst Du eine höhere Wiederverwendbarkeit deines Codes:
Zum Beispiel:
Delphi-Quellcode:
function CheckSumFromString(const aString: String): Integer; // Allgemeine Checksummenbildung über einen String
var
  i: Integer;
  r: Integer;
begin
  if Length(aString) = 0 then
  begin
    r := 0;
  end
  else
  begin
    r := Ord(aString[1]);
    for i := 2 to Length(aString) do
    begin
      r := r xor Ord(aString[i]);
    end;
  end;
  Result := r;
end;

function CalcMyCheckSum(const aString: String): String; //Mit dem Randbedingungen
const
  stx   = #2;
  praefix = 'OWE 509 ';
begin
  Result := IntToHex(CheckSumFromString(stx + praefix + aString), 2);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  blubb: String;
begin
  blubb := CalcMyCheckSum('12346579');
  ShowMessage(blubb);
end;

DoktorD 23. Feb 2006 09:38

Re: XOR Verknüpfung, wie?
 
Zu früh gefreut.

Das Programm welches in das Textfile, welches ich auslesen will, sperrt anscheinend diese Datei.
Klappt das wenn ich das mit diesem fmOpenRead löse?? Ich hab keine Ahnung, wie das geht.

Zur Zeit mache ich das so

Delphi-Quellcode:
function TForm1.GetString():String;
var
  F1: TextFile;
  Text: String;
begin
    try
      AssignFile(F1, sText1);
      Reset(F1);
      while not Eof(F1) do
        begin
          Read(F1, Text);
        end;
      CloseFile(F1);
      result := Text;
    except
      ShowMessage('Fehler beim auslesen der Textdatei');
    end;
end;
Danke!

Klaus01 23. Feb 2006 09:57

Re: XOR Verknüpfung, wie?
 
uups hab auf etwas anderes geantwortet.

Zitat:

das ich IMHO auch völlig korrekt.

1 Byte 0- 255 in Hex 0 - FF

Ein Digit in Hex entsprechen 4 Bit (1 Nibble) und können Werte von 0 bis F annehmen.

Grüße
Klaus

Klaus01 23. Feb 2006 10:06

Re: XOR Verknüpfung, wie?
 
.. das hängt wohl davon ab in welchem Modi das andere Programm die Datei geöffnet hat.

Wenn die andere Datei geöffnet ist, kannst Du aber immer noch ein Kopie davon erstellen
und aus dieser lesen.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 Uhr.
Seite 3 von 4     123 4      

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-2025 by Thomas Breitkreuz