Entwickler-Ecke

Algorithmen, Optimierung und Assembler - hilfe mit xor8 benötigt!


oOXTCOo - Mi 12.08.09 23:01
Titel: hilfe mit xor8 benötigt!
55 03 00 + 4B 0A 00 + 41 = opcode + command + xor8

kann mir jemand dabei helfen?, wie berechne ich xor8 mit delphi?


jaenicke - Mi 12.08.09 23:52

user profile iconoOXTCOo hat folgendes geschrieben Zum zitierten Posting springen:
wie berechne ich xor8 mit delphi?
Was soll xor8 sein? xor ist in Delphi einfach xor.


oOXTCOo - Do 13.08.09 00:58

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconoOXTCOo hat folgendes geschrieben Zum zitierten Posting springen:
wie berechne ich xor8 mit delphi?
Was soll xor8 sein? xor ist in Delphi einfach xor.


ich denke xor 8 bit ?

ich finde leider nichts darüber, darum frage ich hier nach... das habe ich gefunden: http://fundementals.sourceforge.net/cHash.html


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
Function CalcXOR8 (const Buf; const BufSize : Integer) : Byte;
var L : LongWord;
  Begin
    L := XOR32Buf (Buf, BufSize);
    Result := Byte (L) xor
              Byte (L shr 8xor
              Byte (L shr 16xor
              Byte (L shr 24);
  End;

Function CalcXOR8 (const Buf : String) : Byte;
  Begin
    Result := CalcXOR8 (Pointer (Buf)^, Length (Buf));
  End;



aber das hilft mir nicht viel weiter...
ich habe davon heute zum ersten mal gehört...


das "normale" xor ist kein problem, verwende ich sehr oft, leider sagt mir aber xor8 nichts und google auch nicht wirklich...



hab da nochwas gefunden:
Es unterstützt die bekanntesten 58 Standard Algorithmen (Adler32, BSD sum, Bzip2's CRC-32, POSIX cksum, CRC-8, CRC-16, CRC-24, CRC-32 (FCS-32), CRC-64, ELF-32, eMule/eDonkey, FCS-16, GOST R 34.11-94, HAS-160, HAVAL (3/4/5 passes, 128/160/192/224/256 bits), MD2, MD4, MD5, MPEG-2's CRC-32, RIPEMD-128, RIPEMD-160, RIPEMD-256, RIPEMD-320, SHA-0, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, Tiger-128, Tiger-160, Tiger, Tiger2, Tiger Tree Hash, Tiger2 Tree Hash, Unix System V sum, sum8, sum16, sum24, sum32, Whirlpool-0, Whirlpool-1, Whirlpool and xor8).

gefunden in einem java programm namens jacksum.



ich habe mir nun den source runtergeladen (von jacksum) und auch den xor8 source gefunden.
leider in java:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
package jonelo.jacksum.algorithm;

public class Xor8 extends AbstractChecksum {

    public Xor8() {
        super();
        value = 0;
    }


    public void update(byte b) {
        value ^= b & 0xFF;
        length++;
    }


    public void update(int b) {
        update((byte)(b & 0xFF));
    }


}

/*
    Testvector from Motorola's GPS:
    (http://www.motorola.com/ies/GPS/docs_pdf/checksum.pdf)
 
    hex:
      45 61 01 => 25
 */



das sieht sehr nachdem aus was ich suche. 45 61 01 = 25 (sieht gut aus, was ich so sehe)

jetzt muss ich das nur irgendwie in delpgi zum laufen bringen...


uall@ogc - Do 13.08.09 07:26

xor8 = einfaches xor (8bit)?
jedenfalls gilt:

4B xor 0A xor 00 = 41
45 xor 61 xor 01 = 25


Tastaro - Do 13.08.09 08:34

Wenn ich das richtig verstanden habe, dann müsste das xor8 sowas sein:

longword = 32Bit = 4 Byte

MyLongword: MyByte3 | MyByte2 | MyByte1 | MyByte0


Delphi-Quelltext
1:
Xor8 :=  MyByte0 xor MyByte1 xor MyByte2 xor MyByte3;                    


Beste Grüße


oOXTCOo - Do 13.08.09 14:53

achsooo... danke!


das heißt ich müsste einfach nur den command bereich per "normalen" xor xoren und dann habe ich das ergebnis...

verstehe schon... mit xor8 ist gemeint normales xoren des command bereichs ergibt 8 bit inlusive dem ergebnis?


Flamefire - Do 13.08.09 15:02

es ist nicht +FF sonder &FF
also AND $FF
-->wandelt einen wert in ein Byte um, indem es nur die untersten 8bit nimmt

wsa du brauchst, hast du selbst gepostet: jedes byte des buffers mit dem bisherigem ergebnis XORen


oOXTCOo - Do 13.08.09 15:17

user profile iconFlamefire hat folgendes geschrieben Zum zitierten Posting springen:
es ist nicht +FF sonder &FF
also AND $FF
-->wandelt einen wert in ein Byte um, indem es nur die untersten 8bit nimmt

wsa du brauchst, hast du selbst gepostet: jedes byte des buffers mit dem bisherigem ergebnis XORen


danke alles klar, kenne mich jetzt aus...