AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CRC32 für einzelne Wörter!

Ein Thema von fes · begonnen am 6. Jul 2005 · letzter Beitrag vom 28. Jan 2009
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#1

Re: CRC32 für einzelne Wörter!

  Alt 27. Jan 2009, 11:08
ja, nicht mit alle Pointern kann man direkt rechnen

z.B.
Delphi-Quellcode:
PAnsiChar(@DestMAC) + 4
// oder
Pointer(Integer(@DestMAC) + 4)
// und bei Strings
@DestMAC[1] + 1
außerdem zeigt @DestMAC (wenn es ein String ist) nicht auf die Daten (die Zeichen im String), sondern den DatenZeiger (sieht man aber nur, wenn man den internen Aufbau eines Strings kennt)


PS: DestMac, SrcMAC und TypeOrLength sind hier bestimmt als Binärwerte einzurechnen
(es ist wohl sehr unwahrscheinlich, daß die Ethernet-Contoler intern mit Strings arbeiten)

Delphi-Quellcode:
Var DestMAC: Array[0..5] of Byte;
  SrcMAC: Array[0..5] of Byte;
  //VLANTag: LongWord;
  TypeOrLength: Word;
  Data: Array[0..1499] of Byte;
  CRC: ThxCRC32;
  RecCRC, Temp: LongWord;

Begin
  CRC.InitT(CRC32Table04);
  CRC.Init;
  Temp := not PLongWord(@DestMAC[0])^;
  CRC.Update(@Temp, 4);
  CRC.Update(@DestMAC[4], 2);
  Temp := not PLongWord(@SrcMAC[0])^;
  CRC.Update(@Temp, 4);
  CRC.Update(@SrcMAC[4], 2);
  //CRC.Update(@VLANTag, 4);
  CRC.Update(@TypeOrLength, 2);
  CRC.Update(@Data[0], DataLen);
  CRC.Final;
  RecCRC := not CRC.asBin;
End;
Delphi-Quellcode:
Var Rec, TempRec: packed Record
    DestMAC: Array[0..5] of Byte;
    SrcMAC: Array[0..5] of Byte;
    //VLANTag: LongWord;
    TypeOrLength: Word;
    Data: Array[0..1499] of Byte;
  End;
  CRC: ThxCRC32;
  RecCRC: LongWord;

Begin
  TempRec := Rec; // irgendwie kopieren
  CRC.InitT(CRC32Table04);
  CRC.Init;
  For i := 0 to 3 do Begin
    TempRec.DestMAC[i] := not TempRec.DestMAC[i];
    TempRec.SrcMAC[i] := not TempRec.SrcMAC[i];
  End;
  CRC.Update(@TempRec, 6+6{+4}+2+DataLen);
  CRC.Final;
  RecCRC := not CRC.asBin;
End;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 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-2025 by Thomas Breitkreuz