将八进制数转换为十进制和十六进制
我正在编写一个将八进制数转换为十进制和十六进制的程序。我写了一个叫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的想法吗?
你必须改变的开始“的” 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
,所以你不需要更多的代码。
你确定“IntToHex(StrToInt(EditInteger.Text),8)”有效吗? –
如果我发布了这个答案,这意味着我已经测试过它,它的工作原理:/ –
是的,你的代码是正确的,谢谢。会接受 –
此代码接受一个整数的基-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
。
我想这是downvoted,因为第一个字符有一个可以被4整除的Unicode代码点。 –
你的回答很好,你不配做wnvote。 +1 –
['你确定你写过吗?](http://www.delphitricks.com/source-code/math/convert_an_octal_number_to_integer.html):-)? – TLama
我已经看到:D –
它可能会发生,毕竟给你的变量明智的名字是不广泛举行的信仰系统。 Var int:整数。我的眼睛在流血。 –