Thema: Delphi Arbeit mit Buffer

Einzelnen Beitrag anzeigen

Sebastian Nintemann
(Gast)

n/a Beiträge
 
#3
  Alt 28. Mai 2003, 17:27
Hallo Christian, ich bin im Augenblick etwas ratlos.

Ich hatte versucht das so zu machen:
Delphi-Quellcode:
var
  P: PCardinal;
  C: Cardinal;
  //...
begin
  //... buffer füllen


  P := @buffer[4];
  C := P^;

  Memo1.Lines.Add(IntToStr(ord(PByteArray(@C)[0]))+' '+IntToStr(ord(PByteArray(@C)[1]))+' '+IntToStr(ord(PByteArray(@C)[2]))+' '+IntToStr(ord(PByteArray(@C)[3]))+' ');
 {so hab ich mir den Inhalt der 4 bytes anzeigen lassen, hat auch geklappt, 00, 00, 16, 66, das gleiche sagt mir der Hexviewer wenn die die Datei mit der der Buffer gefüllt wird lese.} 

  Memo1.Lines.Add(BytesToBinStr(@tagsize,4));
  {BytesToBinStr zeigt die bytes binär an. Funktion siehe unten. Binär sieht das jetzt so aus: 00000000 00000000 00010000 01000010. Gebe ich diesen Binärwert in den Windows-Rechner ein und stelle auf Dezimal um bekomme ich 4162. Das gleiche wenn ich deine Methode verwende.}

  Memo1.Lines.Add(IntToStr(C));
  {Hier steht jetzt 1108344832, egal ob ichs mit dem Pointer oder mit dem Kopieren der einzelnen bytes mache...}
end;


Hier noch die Funktion BytesToBinStr:
Delphi-Quellcode:
function BytesToBinStr(const bytes: PByteArray; const len: integer): string;
  var
    i,j: integer;
  begin
  result := '';
  for j := pred(len) downto 0 do
  begin

    result := ' ' + result;
    for i := 0 to 7 do
    begin
      if (bytes[j] and ($01 shl i))>0 then
      begin
        result := '1' + result;
      end
      else
      begin
        result := '0' + result;
      end;
    end;

  end;
  end;
Ich versteh einfach nicht wie aus $00 00 10 42 bzw 00000000 00000000 00010000 01000010 die Zahl 1108344832 wird. Ist das niederwertigste Bit nicht rechts?
Vielleicht hab ich auch einen Fehler in der BytesToBinStr Routine oder sonstwo, ich komm nicht drauf... Vielleicht weißt du ja weiter.
Ansonsten wär ich natürlich auch für Kritik dankbar (zB das man ein PByteArray so nicht verwenden sollte o.ä. )

Gruß, Sebastian

[EDIT]Hab mich mit der Hexzahl vertan, ist natürlich $00 00 10 42 (Dezimal:0,0,16,66), wie ich geschrieben hab[/EDIT]
  Mit Zitat antworten Zitat