今天在使用Delphi XE6內建的字串system.string時,發現個問題…
從網路上找了個String To Bytes的範例Code,在Windows下測試都沒問題,放到手機上執行卻一直怪怪的,程式碼如下:
function TMainForm.StrToByte(const Value: String): TIdBytes;
var
I: integer;
begin
SetLength(Result, Length(Value));
for I := 0 to Length(Value) - 1 do
Result[I] := ord(Value[I + 1]); //這行造成問題
end;
發現在手機上執行時,字串的第一個字都會不見,猜想可能是Value[I+1]這段在搞鬼,Google查詢後才發現…
也就是說,在行動裝置上,String字串陣列的起始值是從0開始的,但在桌上型裝置是從1開始的,原來的程式應該是為Windows平台寫的,所以在做Copy字串到Byte這個動作時,故意+1從String[1]開始Copy,但如果這段Code要在行動裝置上執行,就變成要從String[0]開始Copy才行!
所以…稍微改了一下那行程式碼:
{$IF Defined(Win32) OR Defined(Win64)}
Result[I] := ord(Value[I+1]);
{$ELSE}
Result[I] := ord(Value[I]);
{$ENDIF}
這樣這段Code不管是在Windows上或是在行動裝置上都可以正確執行了!