文字コードから文字に変換する(ANSI&UnicodeUTF16)
78 CharCodeToChar 動作確認 Delphi2007 更新日 2008/03/03(月)

文字コードから文字に変換します。

Button1とButton2でMemoに文字コードを出力して
Button3とButton4で文字コードから文字に変換して行に文字を追加しています。



Shift-JISではchr関数を使います。
────────────────────
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin//
  Memo1.Lines.Clear;
  for i := 1 to Length(Edit1.Text) do
  begin
    case ByteType(Edit1.Text, i) of
    mbSingleByte: begin
      Memo1.Lines.Add( IntToHex( Ord( Edit1.Text[i] ), 2) );
    end;
    mbLeadByte: begin
      Memo1.Lines.Add(
        IntToHex( Ord( Edit1.Text[i] ), 2)+
        IntToHex( Ord( Edit1.Text[i+1] ), 2 ) );
    end;
    mbTrailByte: begin
    end;
    end;
  end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
  i: Integer;
  value, value1, value2: Integer;
  s: String;
begin//
  for i := 0 to Memo1.Lines.Count-1 do
  begin
    s := Memo1.Lines[i];
    if Length(s)=2 then
    begin
      if TryStrToInt('$'+s, value) then
      begin
        Memo1.Lines[i] := Memo1.Lines[i] + ' ' +
          Chr(value);
      end;
    end;
    if Length(s)=4 then
    begin
      if TryStrToInt('$'+Copy(s, 1, 2), value1)
        and TryStrToInt('$'+Copy(s, 3, 2), value2) then
      begin
        Memo1.Lines[i] := Memo1.Lines[i] + ' ' +
          Chr(value1)+Chr(value2)
      end;
    end;
  end;
end;
────────────────────

UnicodeUTF-16ではWideCharにキャストすることで変換できます。
────────────────────
procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
  ws: WideString;
begin//
  Memo2.Lines.Clear;
  ws := Edit2.Text;
  for i := 1 to Length(ws) do
  begin
    Memo2.Lines.Add(
      IntToHex( Word( ws[i] ), 4 ) );

//このように書く事も可能
//    Memo2.Lines.Add(
//      IntToHex( HiByte( word( ws[i] ) ), 2) +
//      IntToHex( LoByte( word( ws[i] ) ), 2) );
  end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
  i: Integer;
  value, UpByte, DownByte: Integer;
  s: String;
  wc: WideChar;
begin//
  for i := 0 to Memo2.Lines.Count-1 do
  begin
    s := Memo2.Lines[i];
    if Length(s)=4 then
    begin
      if TryStrToInt('$'+s, value) then
      begin
        Memo2.Lines[i] := Memo2.Lines[i] + ' ' +
          WideChar(value);    
      end;

//このように書く事も可能
//      if TryStrToInt('$'+Copy(s, 1, 2), UpByte)
//        and TryStrToInt('$'+Copy(s, 3, 2), DownByte) then
//      begin
//        Memo2.Lines[i] := Memo2.Lines[i] + ' ' +
//          WideChar( (UpByte*$100) + DownByte ) ;
//      end;
    end;
  end;
end;
────────────────────

注意────────────────────
ここで紹介しているUnicodeUTF-16とはUTF-16のBMP部分だけで
サロゲートペアについては配慮していませんので
UCS-2と呼べるようです。