1

我有代码

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 组件

感谢您的建议,我真的很感激,可能有人有我在将delphi7 vcl组件转换为xe2时必须注意的事项

4

1 回答 1

2

在所有版本的 Delphi 中,我都会这样写:

inc(Sg[1], Length(Triple));

如果可能,避免强制转换总是值得的。在这种情况下,您想要增加一个序数值,inc这就是这样做的。

您的类型转换失败的原因是对分配目标的转换是特殊的。这些类型转换称为变量类型转换文档说:

您可以将任何变量转换为任何类型,只要它们的大小相同并且您不要将整数与实数混合。

在您的情况下,失败是因为尺寸不匹配。那是因为Char在 Unicode Delphi 中是两个字节宽。因此,原始代码的最字面转换是:

Word(Sg[1]) := Word(Sg[1]) + Length(Triple);

但是,使用它会更好更清晰inc

也可以想象,您的 uuencode 函数应该可以使用,AnsiString因为 uuencode 将二进制数据映射到 ASCII 的子集。如果您确实切换到,AnsiString那么您的原始代码将保持不变。说了这么多,我还是觉得inc比较清楚!

于 2013-02-27T09:42:16.763 回答