将字节分配给字符串delphi xe2

时间:2013-02-27 09:35:07

标签: arrays string delphi byte delphi-xe2

我有代码

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时必须注意的事项

1 个答案:

答案 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更清楚!