では、C#のバイナリ処理能力を見たいので、原始的ながらバイナリダンプ。(色もちゃんと変えてね)

program Dump;

{$APPTYPE CONSOLE}
uses Windows, SysUtils;

function GetAttribute(var F: Text): Word;
var
 Info: CONSOLE_SCREEN_BUFFER_INFO;
begin
 GetConsoleScreenBufferInfo(TTextRec(F).Handle, Info);
 Result := Info.wAttributes
end;

procedure SetAttribute(var F: Text; Attr: Word);
begin
 Flush(F);
 SetConsoleTextAttribute(TTextRec(F).Handle, Attr)
end;

procedure WriteData(Data: array of Char; Next: Char);
var
 I: Integer;
 OrdAttr: Word;
begin
 for I := Low(Data) to High(Data) do
  Write(IntToHex(Ord(Data[I]), 2), ' ');

 Write('': (16 - Length(Data)) * 3);

 OrdAttr := GetAttribute(Output);
 SetAttribute(Output, FOREGROUND_GREEN);
 Write(': ');
 SetAttribute(Output, OrdAttr);

 for I := Low(Data) to High(Data) do
  if Data[I] in [#$20..#$7e, #$80..#$fe] then
  begin
   Write(Data[I]);
   if (I = High(Data)) and (Data[I] in LeadBytes) and (Next in [#$20..#$ff]) then
    Write(Next)
  end
  else
  begin
   OrdAttr := GetAttribute(Output);
   SetAttribute(Output, FOREGROUND_RED);
   Write('.');
   SetAttribute(Output, OrdAttr)
  end;

 WriteLn
end;