文字列を文字コードに変換する(ANSI&UnicodeUTF16)
|
77 |
CharToCharCode |
動作確認 |
Delphi2007 |
更新日 |
2008/03/03(月) |
文字コードはよく16進数で表現されるので
それにあわせて変換します。
文字をコードに変換する場合は次のようにします。
ShowMessage(IntToHex(word('A'),2));
ShowMessage(IntToHex(Ord('A'),2));
41
と表示されます
逆にコードの値から文字に変換するには次のようにします。
ShowMessage(Char(StrToInt('$41')));
ShowMessage(Char($41));
ShowMessage(Chr($41));
どれでも
A
と表示されます。
OrdとChrを使うのがより適切です。
日本語、Shift-JISの場合も1文字ずつ取り出してコードを調べることができますし
UnicodeUTF-16(Windows上のUnicodeでは標準)も
同じような方法で取得できます。
────────────────────
//AnsiString、Shift-JISの場合
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin//
for i := 1 to Length(Edit1.Text) do
begin
Memo1.Lines.Add( IntToHex( Ord( Edit1.Text[i] ), 2) );
end;
end;
//WideString、UnicodeUTF16の場合
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
ws: WideString;
begin//
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;
────────────────────
"abcABCあいう"という文字列を設定した場合
Memo1にはShiftJISコードで
61
62
63
41
42
43
82
A0
82
A2
82
A4
と出力され、
Memo2ではUnicodeUTF16で
0061
0062
0063
0041
0042
0043
3042
3044
3046
と出力されます。
────────────────────
アスキーコード(ASCII CODE)表を記述しておきます。
┌─┬┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│ ││0│1│2│3│4│5│6│7│8│9│A│B│C│D│E│F│→上位
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤4ビッ
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ト
│0││*│*│SP│ 0│ @│ P│ `│ p│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│1││*│*│ !│ 1│ A│ Q│ a│ q│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│2││*│*│ "│ 2│ B│ R│ b│ r│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│3││*│*│ #│ 3│ C│ S│ c│ s│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│4││*│*│ $│ 4│ D│ T│ d│ t│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│5││*│*│ %│ 5│ E│ U│ e│ u│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│6││*│*│ &│ 6│ F│ V│ f│ v│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│7││*│*│ '│ 7│ G│ W│ g│ w│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│8││*│*│ (│ 8│ H│ X│ h│ x│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│9││*│*│ )│ 9│ I│ Y│ i│ y│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│A││*│*│ *│ :│ J│ Z│ j│ z│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│B││*│*│ +│ ;│ K│ [│ k│ {│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│C││*│*│ ,│ <│ L│ \│ l│ |│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│D││*│*│ -│ =│ M│ ]│ m│ }│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│E││*│*│ .│ >│ N│ ^│ n│ ~│ │ │半│半│半│半│ │ │
├─┼┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│F││*│*│ /│ ?│ O│ _│ o│*│ │ │半│半│半│半│ │ │
└─┴┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
↓下位
4ビット
[41]が『A』になり
[7A]が『z』になります。
半は半角カナ領域です。
参考────────────────────
文字列の注意点(その1)
http://www.threeweb.ad.jp\~satou\string.htm
注意────────────────────
ここで紹介しているUnicodeUTF-16とはUTF-16のBMP部分だけで
サロゲートペアについては配慮していませんので
UCS-2と呼べるようです。
|