procedure ShowBinary(var Data; Count: Cardinal; DispProc: TDisplayProc); var line: string[80]; i: Cardinal; p: PChar; nStr: string[4]; const posStart = 1; binStart = 7; ascStart = 57; HexChars: PChar = ′0123456789ABCDEF′; begin p := @Data; line := ′′; for i := 0 to Count - 1 do begin if (i mod 16) = 0 then begin if Length(line) > 0 then DispProc(line); FillChar(line, SizeOf(line), ′ ′); line[0] := Chr(72); nStr := Format(′%4.4X′, [i]); Move(nStr[1], line[posStart], Length(nStr)); line[posStart + 4] := ′:′; end; if p[i] >= ′ ′ then line[i mod 16 + ascStart] := p[i] else line[i mod 16 + ascStart] := ′.′; line[binStart + 3 * (i mod 16)] := HexChars[(Ord(p[i]) shr 4) and $F]; line[binStart + 3 * (i mod 16) + 1] := HexChars[Ord(p[i]) and $F]; end; DispProc(line); end;
procedure TForm1.Display(const S: string); begin Memo1.Lines.Add(S); end;
procedure TForm1.Button1Click(Sender: TObject); var ms: TMemoryStream; begin if Opendialog1.Execute then begin ms := TMemoryStream.Create; try ms.LoadFromfile(OpenDialog1.FileName); ShowBinary(ms.Memory^, ms.Size, Display); finally ms.Free end; end; end;