将八进制数转换为十进制和十六进制

时间:2013-08-19 22:47:30

标签: delphi

我正在编写一个将八进制数转换为十进制和十六进制的程序。我写了一个名为OctToInt的函数。

function OctToInt(Value: string): Longint;
var
  i: Integer;
  int: Integer;
begin
  int := 0;
  for i := 0 to Length(Value) do
  begin
    int := int * 8 + StrToInt(Copy(Value, i, 1));
  end;
  Result := int;
end; 

我用这种方式调用这个函数:

var oct:integer;
begin
 oct:=OctToInt(Edit13.Text);
 Edit15.Text:=IntToStr(oct);
end;

当我输入34(八进制)时,十进制数应为28,但程序给我220.你知道为什么吗?

另外,您对转换器OctToHex有什么想法吗?

2 个答案:

答案 0 :(得分:6)

此代码接受带有整数的base-8表示的字符串,并返回相应的整数:

function IntPower(const N, k: integer): integer;
var
  i: Integer;
begin
  result := 1;
  for i := 1 to k do
    result := result * N;
end;

function OctToInt(const Value: string): integer;
var
  i: integer;
begin
  result := 0;
  for i := 1 to Length(Value) do
    inc(result, StrToInt(Value[i]) * IntPower(8, Length(Value) - i));
end;

在将整数转换为十六进制字符串表示时,您已经拥有IntToHex

答案 1 :(得分:6)

您必须将“您的”for的开头更改为1。

function OctToInt(Value: string): Longint;
var
  i: Integer;
  int: Integer;
begin
  int := 0;
  for i := 1 to Length(Value) do  //here you need 1, not 0
  begin
    int := int * 8 + StrToInt(Copy(Value, i, 1));
  end;
  Result := int;
end;

转换Octal-Hexadecimal可能很难做到,所以我建议你采用另一种方式:

EditHexadecimal.Text:=(IntToHex(StrToInt(EditInteger.Text),8));  

正如您在此处所看到的,使用此代码,EditHexadecimal是您放置十六进制数字的编辑。使用该行,我将一个数字从十进制转换为十六进制。

你已经有了十进制数,因为你使用函数OctToInt得到它,所以你不需要更多的代码。