我正在编写一个将八进制数转换为十进制和十六进制的程序。我写了一个名为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有什么想法吗?
答案 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
得到它,所以你不需要更多的代码。