Delphi 字符类转换集《转》

一、string转为ansistring

1、直接赋值 (有警告)

2、ansistring()类型强制转换。(无警告)

二、ansistring 转为string

1、直接赋值 (有警告)

2、string()类型强制转换。(无警告)

三、string 转为Tbytes

1、bytes:= bytesof(str) 已转为ansi编码

2、bytes:= widebytesof(str) UNICODE 编码

四、ansistring 转为Tbytes

1、bytes:= bytesof(str) ansi编码

2、bytes:= widebytesof(string(str)) UNICODE 编码

五、Tbytes 转为string

1、 str:=stringof(bytes) Tbytes 为ansi编码

2、 str:=widestringof(bytes) Tbytes 为unicode编码

六、PChar转String

用StrPas函数,StrPas(PChar):AnsiString;

设有以下三个变量:

var

s:string;

p:pchar;

a:array[1..20] of char;

那么三者之间的转换如下:

1、字符串到PChar

p:=PChar(s);

2、PChar到字符串

s:=p;

3、PChar到字符数组

StrCopy(@a,p);

4、字符数组到PChar

PChar(@a);

5、字符串与字符数组之间的转换就只有通过PChar来中转了。例如下面这个例子:

procedure TForm1.btn1Click(Sender: TObject);

var

str:array[1..10] of char;

begin

StrCopy(@str,PChar(mmo1.Text));

mmo2.Text:=PChar(@str);

end;

以下是本人自己编写发送短信的一段代码,实现字符串转UTF8编码

  //SMS
  if IsPhoen(edtTEL.Text) then
    begin
      SysconfigRun;
      if Sysconfig.ReadBool('SMS','AddingSend',False) then
        begin
          if Sysconfig.ReadInteger('SMS','AddingMode',0) = 0 then
            begin
               if MessageBox(Handle, PChar('是否发送短信?                                         '),
               PChar('短信'), MB_ICONINFORMATION or MB_YESNO or MB_DEFBUTTON1) = IDYES then
                 begin
                   goto GoToS;
                 end;
            end
          else
            begin
              GoToS :
              Params := TStringList.Create;
              IDHTTP1 := TIdHTTP.Create(nil);
              reg := TPerlRegEx.Create;
              Params.Add('ac='+trim(Sysconfig.ReadString('SMS','SMSA','')));
              Params.Add('authkey='+trim(Sysconfig.ReadString('SMS','SMSP','')));
              Params.Add('m='+trim(edtTEL.Text));
              Params.Add('action=sendOnce');
              Params.Add('cgSMS','CGID','')));

              Params.Add('csSMS','CSID','')));
              Params.Add('c='+Utf8ToAnsi(UTF8Encode(Matching(edtTID.Text,edtUserName.Text,edt2.Text,trim(Sysconfig.ReadString('SMS','AddingInfo',DateTimeToStr(Now)))))));
              if Sysconfig.ReadString('SMS','AddingInfo','') <> '' then
                begin
                  WriteLog(IDHTTP1.Post('http://smsapi.c123.cn/OpenPlatform/OpenApi', Params));
                end;
              FreeAndNil(IDHTTP1);
              FreeAndNil(Params);
              FreeAndNil(reg);
            end;
        end;
      Sysconfig.Destroy;
    end;