2013-08-19 295 views
1

我正在编写一个将八进制数转换为十进制和十六进制的程序。我写了一个叫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的想法吗?

+5

['你确定你写过吗?](http://www.delphitricks.com/source-code/math/convert_an_octal_number_to_integer.html):-)? – TLama

+2

我已经看到:D –

+1

它可能会发生,毕竟给你的变量明智的名字是不广泛举行的信仰系统。 Var int:整数。我的眼睛在流血。 –

回答

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; 

转换八进制可能是很难做到的,所以我建议你另一种方式:

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

正如你在这里看到的,用这个代码EditHexadecimal是编辑你放置十六进制数字的地方。用那条线我将十进制数转换成十六进制数。

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

+0

你确定“IntToHex(StrToInt(EditInteger.Text),8)”有效吗? –

+3

如果我发布了这个答案,这意味着我已经测试过它,它的工作原理:/ –

+0

是的,你的代码是正确的,谢谢。会接受 –

6

此代码接受一个整数的基-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

我想这是downvoted,因为第一个字符有一个可以被4整除的Unicode代码点。 –

+5

你的回答很好,你不配做wnvote。 +1 –

相关问题