使用 Dev-Pascal 的十六进制到十进制 Pascal 错误非法表达式

Hexadecimal to Decimal Pascal Error Illegal Expression using Dev-Pascal

我正在创建一个将十六进制数转换为十进制数的程序。这是代码:

program hexadesimal;
uses crt;
var
d, j, l, pow, y:integer;
x:longint;
h:string;
label z;
begin
z:
readln(h);
d:=0;
l:=length(h);
for j:=1 to length(h) do
begin
if (h[j] = 'A') then h[j] = '10';
if (h[j] = 'B') then h[j] = '11';
if (h[j] = 'C') then h[j] = '12';
if (h[j] = 'D') then h[j] = '13';
if (h[j] = 'E') then h[j] = '14';
if (h[j] = 'F') then h[j] = '15';
l:=l - 1;
pow := power(16, l);
val(h[j], x, y);
d := d + (x * pow);
end;
writeln(d);
readln;
end.

然而,当我编译时,错误出现非法表达式,它指向这些行:

if (h[j] = 'A') then h[j] = '10';
if (h[j] = 'B') then h[j] = '11';
if (h[j] = 'C') then h[j] = '12';
if (h[j] = 'D') then h[j] = '13';
if (h[j] = 'E') then h[j] = '14';
if (h[j] = 'F') then h[j] = '15';

我该怎么办?

if (h[j] = 'A') then h[j] = '10';行没有意义。 h[j] 指的是字符串中的一个字符,因此它不能等于一个字符串(包含 2 个或多个字符),如 '10'。如果您希望将值分配给您需要使用 := 运算符的变量。 h[j] = '10' 不是赋值符,而是比较运算符,在您的情况下会导致 FALSE 。换句话说,您将获得以下结构:if (TRUE/FALSE) then FALSE;