我有这个问题,请查看以下示例代码:
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])引发异常所以需要改变字节。 当然,我不认为这是最好的解决方案,所以我问你是否有更好的解决方案。 非常感谢。
答案 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的行为一样。这是范围检查非常有价值的另一个例子。