[文字列型、文字型、文字の配列 を相互変換する]

文字列型、文字型、文字の配列 を相互に変換して表示します。

Delphiでは、文字列は string型、文字は Char型、文字配列(ヌルで終わる文字列)はPChar型で表します。
Charの配列を含めた4つの型で、それぞれに相互変換変換する方法は下記の通りです。

 String ->
   Char       :インデックスで1文字指定し代入
   PChar      :PCharでキャストし代入、または、Getmemでメモリを確保しstrCopyで代入
   Charの配列 :strCopyで代入

 Char   ->
   String     :直接代入 または、stringでキャストし代入
   PChar      :stringにキャストし、さらにPCharにキャストして代入(?)
   Charの配列 :インデックスを指定して代入(?)

 PChar  ->
   String     :直接代入、または、stringでキャストし代入
   Char       :インデックスで1文字指定し代入
   Charの配列 :strCopyで代入

 Charの配列->
   String     :直接代入、または、stringでキャストし代入
   Char       :インデックスで一文字指定し代入
   PCha       :直接代入
【ソースコード】 [tips0028.pas]
program tips0028;
{$APPTYPE CONSOLE}
uses SysUtils;
var
 C:Char;
 S:String;
 P:PChar;
 CS:array[0..255] of Char;

begin
//string->Char (1-1)
 S:='ABCD';
 C:=S[3];                      //Cが代入される
 WriteLn('(1-1)string->Char: ',C); 

//string->PChar (1-2)
 S:='ABCD';
 P:=PChar(S);                  //PCharでキャストする
 WriteLn('(1-2)string->PChar: ',P); 

 getMem(P,Length(S)+1);
 try
  StrCopy(P,PChar(S));         //strCopyで代入
  WriteLn('(1-2)string->PChar: ',P); 
 finally
  FreeMem(P);
 end;

//string->Charの配列 (1-3)
 S:='ABCD';
 strCopy(CS,PChar(s));           //stringでキャスト
 WriteLn('(1-3)string->Charの配列: ',CS); 


//Char->string (2-1)
 C:='A';
 S:=C;                         //直接代入してもよい
 WriteLn('(2-1)Char->string: ',S);  

 S:=string(C);                 //stringでキャスト
 WriteLn('(2-1)Char->string: ',S);  

//Char->PChar (2-2)
 C:='A';
 P:=PChar(string(C));          //string、PCharにキャストして代入
 WriteLn('(2-2)Char->PChar: ',P);  

//Char->Charの配列 (2-3)
 C:='A';
 strCopy(CS,' ');              //1バイトの長さに設定
 CS[0]:=C;                     //インデックスを使用して代入
 WriteLn('(2-3)Char->Charの配列: ',CS);  


//PChar->string (3-1)
 P:='ABCD';
 S:=P;                         //直接代入してもよい
 WriteLn('(3-1)PChar->string: ',S); 

 S:=string(P);                 //stringでキャスト
 WriteLn('(3-1)PChar->string: ',S); 

//PChar->Char (3-2)
 P:='ABCD';
 C:=P[2];                      //Cが代入される
 WriteLn('(3-2)PChar->Char: ',C); 

//PChar->Charの配列 (3-3)
 P:='ABCD';
 StrCopy(CS,P);                //strCopyで代入
 WriteLn('(3-3)PChar->Charの配列: ',CS); 


//Charの配列->string (4-1)
 CS:='ABCD';
 S:=CS;                       //直接代入してもよい
 WriteLn('(4-1)Charの配列->string: ',S); 

 S:=string(CS);               //stringでキャスト
 WriteLn('(4-1)Charの配列->string: ',S); 

//Charの配列->Char (4-2)
 CS:='ABCD';
 C:=CS[2];                    //Cが代入される
 WriteLn('(4-2)Charの配列->Char: ',C); 

//Charの配列->PChar (4-3)
 CS:='ABCD';
 P:=CS;                       //直接代入
 WriteLn('(4-3)Charの配列->PChar: ',P); 

end.
【コンパイル&実行】 [tips0028.bat]
dcc32 tips0028.pas 
tips0028.exe  > tips0028.txt
pause
【実行結果】 [tips0028.txt]
(1-1)string->Char: C
(1-2)string->PChar: ABCD
(1-2)string->PChar: ABCD
(1-3)string->Charの配列: ABCD
(2-1)Char->string: A
(2-1)Char->string: A
(2-2)Char->PChar: A
(2-3)Char->Charの配列: A
(3-1)PChar->string: ABCD
(3-1)PChar->string: ABCD
(3-2)PChar->Char: C
(3-3)PChar->Charの配列: ABCD
(4-1)Charの配列->string: ABCD
(4-1)Charの配列->string: ABCD
(4-2)Charの配列->Char: C
(4-3)Charの配列->PChar: ABCD