首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 內存數據十六進制/二進制查看工具函數

     編輯:Delphi

功能

  • ToHex:任意內存地址轉十六進制字符串 (每字節 2 位,空格分隔)。
  • ToBin:轉二進制字符串 (每字節 8 位,空格分隔)。
  • ToBin2:優化版,直接位運算生成,無中間字符串。

核心代碼

function ToHex(p: PByteArray; bit: Integer): string;
var
  i: Integer;
begin
  Result := '';
  for i := 0 to bit - 1 do
    Result := IntToHex(p^[i], 2) + ' ' + Result;
  Result := TrimRight(Result);
end;

function ToBin(p: PByteArray; bit: Integer): string;
const
  Convert: array['0'..'F'] of string = (
    '0000','0001','0010','0011','0100','0101','0110','0111',
    '1000','1001','','','','','','',
    '1010','1011','1100','1101','1110','1111');
var
  i: Integer;
  s: string;
begin
  s := ToHex(p, bit);
  Result := '';
  for i := 1 to Length(s) do
    if s[i] <> ' ' then
      Result := Result + Convert[s[i]]
    else
      Result := Result + ' ';
end;

{ 優化版:直接位運算 }
function ToBin2(p: PByteArray; b: Integer): string;
var
  i, j: Integer;
begin
  Result := StringOfChar('0', b * 8);
  for i := 0 to b - 1 do
    for j := 0 to 7 do
      if Odd(p^[b - 1 - i] shr j) then
        Result[i * 8 + 8 - j] := '1';
end;

測試用例

procedure TForm1.Button1Click(Sender: TObject);
var
  num: Integer;
begin
  Randomize;
  num := Random(MaxInt);
  ShowMessage(IntToStr(num) + sLineBreak + sLineBreak +
    ToHex(@num, 4) + sLineBreak + sLineBreak +
    ToBin(@num, 4));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  str: string;
begin
  str := 'Delphi 2010';
  ShowMessage(str + sLineBreak + sLineBreak +
    ToHex(@str[1], Length(str) * SizeOf(Char)) + sLineBreak + sLineBreak +
    ToBin(@str[1], Length(str) * SizeOf(Char)));
end;

{ 測試 Single 浮點數二進制 }
procedure TForm1.Button3Click(Sender: TObject);
var
  f: Single;
begin
  f := -31.4;
  Memo1.Lines.Add(ToBin2(@f, SizeOf(f))); // IEEE 754 表示
end;

應用場景

  • 調試結構體內存佈局、對齊問題。
  • 分析文件頭、網絡封包原始數據。
  • 教學演示整數/浮點數內存表示 (如 IEEE 754)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved