我有代码
procedure _UUEncode;
var
Sg: string;
Triple: string[3];
begin
...
Byte(Sg[1]) := Byte(Sg[1]) + Length(Triple); // <- on this line I got error
...
end;
我得到了“左边的标志无法分配”错误,有人可以帮帮我吗? 我尝试从Delphi 7组件转换为XE2组件
感谢您的建议,我真的很感激,可能有人有cheklist在将delphi7 vcl组件转换为xe2时必须注意的事项
答案 0 :(得分:2)
我会在所有版本的Delphi中这样写它:
inc(Sg[1], Length(Triple));
如果可能的话,总是值得避免演员阵容。在这种情况下,您希望增加一个序数值,而inc
就是这样做的。
你的类型转换失败的原因是对作业目标的强制转换是特殊的。这些类型转换称为变量类型转换,documentation表示:
您可以将任何变量强制转换为任何类型,只要它们的大小相同且您不将整数与实数混合。
在您的情况下,失败是因为尺寸不匹配。因为Char
在Unicode Delphi中是两个字节宽。因此,原始代码的最直接转换是:
Word(Sg[1]) := Word(Sg[1]) + Length(Triple);
然而,使用inc
会更好更清楚。
也可以想象你的uuencode函数应该与AnsiString
一起使用,因为uuencode将二进制数据映射到ASCII的子集。如果您确实切换到AnsiString
,那么原始代码将保持不变。也就是说,我仍然认为inc
更清楚!