Inno setup &引用;冒号(';:';)应为“;Inno Setup Pascal脚本中case语句中字符范围的编译器错误

Inno setup &引用;冒号(';:';)应为“;Inno Setup Pascal脚本中case语句中字符范围的编译器错误,inno-setup,pascalscript,Inno Setup,Pascalscript,我在这段代码(第14行;第10列)上得到了一个“冒号(:)预期”语法错误,我不知所措。这段代码在Inno安装编译器中运行,它类似于Delphi,但我认为它不是完整的Delphi Inno安装版本是5.5.9(a),所以是Ansi版本 过程HexToBin(常量Hex:string;流:TStream); 变量 B:字节; C:半焦; Idx,Len:整数; 开始 Len:=长度(十六进制); 如果Len=0,则退出; 如果(Len mod 2)0,则引发异常('bad hex length');

我在这段代码(第14行;第10列)上得到了一个“冒号(:)预期”语法错误,我不知所措。这段代码在Inno安装编译器中运行,它类似于Delphi,但我认为它不是完整的Delphi

Inno安装版本是5.5.9(a),所以是Ansi版本

过程HexToBin(常量Hex:string;流:TStream);
变量
B:字节;
C:半焦;
Idx,Len:整数;
开始
Len:=长度(十六进制);
如果Len=0,则退出;
如果(Len mod 2)0,则引发异常('bad hex length');
Idx:=1;
重复
C:=Hex[Idx];
案例C
“0”..“9”:B:=字节((Ord(C)-“0”)shl 4);
‘A’…‘F’:B:=字节((Ord(C)-‘A’+10)shl4);
‘a’…‘f’:B:=字节((Ord(C)-‘a’+10)shl4);
其他的
RaiseException(“错误的十六进制数据”);
结束;
C:=Hex[Idx+1];
案例C
'0'…'9':B:=B或字节(Ord(C)-'0');
'A'..'F':B:=B或字节((Ord(C)-'A')+10);
'a'..'f':B:=B或字节((Ord(C)-'a')+10);
其他的
RaiseException(“错误的十六进制数据”);
结束;
Stream.WriteBuffer(B,1);
公司(Idx,2),;
直到Idx>Len;
结束;
开始
FStream:=TFileStream.Create('myfile.jpg',fmCreate);
HexToBin(myFileHex,FStream);
FStream.Free;
结束;

有人能发现我的错误吗?

Ansi版本的Inno安装程序似乎不支持
case
语句中的范围

因此,您必须枚举集合:

案例C
“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”:B:=。。。;
...
结束;
在什么情况下,如果,则最好使用


if(C>='0')和(C更新了完整的最小示例。该代码中唯一的错误是Martin提到的错误。ansi版本似乎无法解析大小写范围。请使用unicode版本或扩展范围('0'、'1'、…)。