Delphi XE2和Char / Byte类型

时间:2011-09-20 09:45:25

标签: delphi delphi-xe2

我有这个问题,请查看以下示例代码:

src := '';
for iindex := 0 to 255 do
  begin
    src := src + char(byte(iindex));
    writeln (iindex:5, byte(src[iindex]):5);
  end;

其中src是一个字符串类型,iindex是一个整数类型,作为输出我应该有一些东西:

iIndex   byte(src[iIndex])
 0         0
 1         1
 2         2
 3         3
 ..................
 254       254
 255       255   

所以在所有持续版本的delphi中也是如此,直到delphi xe;现在使用delphi xe2,我有这个输出:

iIndex   byte(src[iIndex])
 0         0
 1         0
 2         1
 3         2
 ..................
 254       253
 255       254   

现在我问,需要使用不同类型的字符串?我找到了一个解决方法当然,将byte(src [iindex])更新为byte(src [succ(iindex)]),但是当iIndex = 255时,我有字节(src [256])引发异常所以需要改变字节。 当然,我不认为这是最好的解决方案,所以我问你是否有更好的解决方案。 非常感谢。

1 个答案:

答案 0 :(得分:6)

您正在访问字符串越界。 Delphi中的字符串访问是基于1的。你应该得到范围检查错误。此外,我认为您应该更喜欢使用chr()ord()代替演员。

src := '';
for iindex := 0 to 255 do
begin
  src := src + chr(iindex);
  writeln (iindex:5, ord(src[iindex+1]):5);
end;

我没有看到代码可以在早期版本的Delphi中运行。实际上,一旦禁用了范围检查,Delphi 2010的行为就像描述XE2的行为一样。这是范围检查非常有价值的另一个例子。