使用指针将十进制转换为二进制

时间:2013-12-04 11:18:11

标签: delphi

我正在尝试访问程序的内存,以便将十进制输入转换为二进制输出。我目前正在尝试做的是使用@input访问我的整数的起始地址,然后每次将地址递增1并将该地址的值写入控制台。

例如:

  • 输入:2
  • 输出:00000000000000000000000000000010

有人可以给我一些关于如何做到这一点的提示(或指示?哈哈)?感谢。

1 个答案:

答案 0 :(得分:2)

我不是百分百肯定我明白你在问什么。

您可以使用这样的函数将值转换为二进制表示形式,取自Indy单元IdGlobalProtocols

function IntToBin(Value: LongWord): string;
var
  i: Integer;
begin
  SetLength(Result, 32);
  for i := 1 to 32 do begin
    if ((Value shl (i-1)) shr 31) = 0 then begin
      Result[i] := '0'
    end else begin
      Result[i] := '1';
    end;
  end;
end;

另一方面,也许您只是想问一下如何将地址增加一个。好吧,获取地址并添加一个。有两种方法可以做到这一点。如果要将地址作为数字处理,请将其转换为指针大小的整数:

var
  Address: UIntPtr;
....
Address := UIntPtr(@someVar);

现在你可以进行算术了。例如:

inc(Address);
Address := Address + 8;

等等。

如果您确实希望执行指针运算然后取消引用指针,则更容易使用指针类型。所以,如果你想挑选字节,那么你可以这样做:

var
  BytePtr: PByte;
....
BytePtr := PByte(@someVar);

现在你可以用

读取一个字节
b := BytePtr^;

下一个是:

inc(BytePtr);
b := BytePtr^;

最后,如果你想拉出构成整数的字节,那么就有LongRec类型。写LongRec(someIntVar).Bytes[i]以读取构成整数的4个字节之一。存在类似的记录WordRecInt64Rec。这些类型在SysUtils

中定义