ZeroMemory CopyMemory Copy Move Pos Length SetLength t:AnsiString; t2:WideString; 使用MidBStr 對于ansiString,Length長度基于字節(jié).無論2006還是xe. Ansi前綴函數的都基于字符 在2006中.默認字符是AnsiChar, 對于AnsiString類型的變量 MidStr 基于字符 Rightstr Midstr xe中默認字符是WideChar 對于AnsiString類型的變量 Midstr 基于字節(jié) t:='中國1'; showMessage(inttostr(Length(t)));//5 顯然不能為3,否則,Setlength(3),輸入3個中文字符就越界了.前后不一致 AnsiLength(t) = 3 AnsiPos('1',t);//3基于字符 showMessage(AnsiMidstr(t,2,2));//基于字符 showMessage(Midstr(t,2,2));//基于字節(jié) xe showMessage(inttostr(Length(t))); //5 2006 Rightstr(t,2); //基于字符 2006 showMessage(Midstr(t,2,2));//基于字符 2006 msg:string; msgW:widestring; begin msg :='中文123123'; msgW := '中文123123'; Delete(msg,1,4);//結果是 msg='123123' Delete(msgW ,1,2);//結果是 msgW ='123123' t2:='中國1'; showMessage(inttostr(Length(t2)));//3 delphi中如何將byte[]字節(jié)數組類型的數據轉化成string類型的字符串數據B:array[0..15] of byte S := StrPas(@B); For i:=low(b) to high(b) do Move(b[ 0 ],s[ 1 ],Length(b)); 在delphi2010中fillchar中的char還是按字節(jié)來做. MyRec = record I: Integer; S: string; R: Real; end; PMyRec = ^MyRec; Rec := PRec^; var PRec: PMyRec; Rec: MyRec; CopyMemory(@Rec,PRec,Sizeof(MyRec)); 需要清零的成員包括 string、動態(tài)數組類型、interface 等由 rtl 管理生存期的類型。因為不清零的話,這些個成員就是一個個野指 針,rtl 一跑就直接掛了。這里 TMyRec 里的 S 就是需要清零的成員,New 相當于 GetMem+Initialize |
|