【发布时间】:2015-06-19 13:50:46
【问题描述】:
编写一个程序,在不使用内置函数的情况下将整数转换为其十六进制表示。
这是我的代码,但它不起作用。谁能告诉错误在哪里?
报错:
“项目引发异常类 EAccessViolation,并带有消息“模块 'Project.exe' 中地址 00453B7B 的访问冲突。写入地址 FFFFFFFF'。进程已停止。使用 Step 或 Run 继续。”
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Forms,
Dialogs;
type
TForm1 = class(TForm)
end;
function hexvalue(num:Integer):Char;
var
Form1: TForm1;
implementation
{$R *.dfm}
function hexvalue(num:Integer):Char;
begin
case num of
10: Result:='A';
11: Result:='B';
12: Result:='C';
13: Result:='D';
14: Result:='E';
15: Result:='F';
else Result:=Chr(num);
end;
end;
var
intnumber,hexnumber,actualhex:String;
integernum:Integer;
i,j,k:Byte;
begin
InputQuery ('Integer Number','Enter the integer number', intnumber);
integernum:=StrToInt(intnumber);
i:=0;
while integernum >= 16 do
begin
hexnumber[i]:=hexvalue(integernum mod 16);
integernum:= integernum div 16;
Inc(i);
end;
hexnumber[i]:= hexvalue(integernum);
k:=i;
for j:=0 to k do
begin
actualhex[j]:= hexnumber[i];
Dec(i);
end;
ShowMessage(actualhex);
end.
【问题讨论】:
-
Result:=Chr(num);高度可疑。例如,Chr(3)不等于'3'。看看en.wikipedia.org/wiki/ASCII。 -
Chr($ffffffff)? ......
-
Too many errors... 1) 你没有为
hexnumber设置长度,所以你不能通过索引字符(hexnumber[i])来访问它,因为那些字符索引没有'不存在。 2)Chr(num)完全错误。Chr(3)不会按照你的想法去做。 3) 你的case只能正确处理 10..15;如果num= 17、23、64 或 99 会发生什么? 4)你随意混合各种数据大小。 5) 参见#1,将所有hexnumber实例替换为actualhex。 -
@Ken White 您提到的错误 #3 永远不会发生,因为十六进制值函数的参数始终为 (mod 16)。
-
@Ansh43 我看不到问题中指定的内容。