Mega Code Archive

 
Categories / Delphi / Files
 

How to read a binary file and display the byte values as ASCII

Title: How to read a binary file and display the byte values as ASCII type TDisplayProc = procedure(const s: string) of object; procedure ShowBinary(var Data; Count: Cardinal; DispProc: TDisplayProc); implementation 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;