Einzelnen Beitrag anzeigen

Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#2

Re: csum-Function von C++ nach Delphi

  Alt 3. Sep 2006, 09:46
Hi

Zitat von Sebastian R.:
Code:
 int csum(const void *bufv, int length)
 {
    const unsigned short *buf = (const unsigned short *)bufv;
    unsigned long result = 0;

    while (length > 1) {
        result += *(buf++);
        length -= sizeof(*buf);
    }
    if (length) result += *(unsigned char*)buf;
    result = (result >> 16) + (result & 0xFFFF);
    result += (result >> 16);
    result = (~result)&0xFFFF;

    return (int)result;
 }
Kompiliert, probiert hab ichs aber nicht. Sollte jedoch so ziemlich das selbe sein:
Delphi-Quellcode:
function csum(const bufv: Pointer; length: integer): integer;
var
  res, bufIndex: cardinal;
  buf: packed array of word;
begin
  res := 0;
  bufIndex := 0;
  buf := bufv;
  while (length > 1) do
  begin
    inc(res, buf[bufIndex]);
    inc(bufIndex);
    dec(length, sizeof(word));
  end;
  res := (res shr 16) + (res and $FFFF);
  inc(res, res shr 16);
  res := (not res) and $FFFF;
  result := Integer(res);
end;
Der einzige groessere unterschied zur Implementierung oben ist, dass ich nicht buf, also den ArrayZeiger inkrementiere, sondern dass ich ueber einen Index (bufIndex) nacheinander auf die Elemente zugreife.

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat