2013-08-19 148 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 –

相關問題