close

今天在使用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查詢後才發現…

IndexingOfStrings  

也就是說,在行動裝置上,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上或是在行動裝置上都可以正確執行了!

 

arrow
arrow
    創作者介紹
    創作者 無人知曉的Tony 的頭像
    無人知曉的Tony

    無人知曉的Tony

    無人知曉的Tony 發表在 痞客邦 留言(0) 人氣()