本文詳細介紹 Char/AnsiChar (1 字節) 和 WideChar (2 字節) 與其編碼值 (整數) 之間的相互轉換方法。
var
b: Byte;
c: Char;
begin
// 字符 → 編碼 (多種等效寫法)
b := Ord('A'); // 65
b := Ord(#65); // 65
b := Ord($41); // 65
b := Ord(#$41); // 65
b := Byte('A'); // 65
b := Byte(#65); // 65
b := Byte($41); // 65
b := Byte(#$41); // 65
// 編碼 → 字符 (多種等效寫法)
c := Chr(65); // 'A'
c := Chr($41); // 'A'
c := Char(65); // 'A'
c := Char($41); // 'A'
end;
關鍵點:
Ord 返回字符的序數值 (0-255)Byte() 類型轉換同樣有效Chr 函數將整數轉為字符Char() 類型轉換同樣有效#65 十進制字符常量,#$41 十六進制字符常量Length(c) 永遠為 1,SizeOf(c) 為 1 字節var
w: Word;
c: WideChar;
ws: WideString;
s: string;
begin
// 準備:獲取一個漢字
ws := '萬一';
c := ws[1]; // '萬'
// 漢字 → Unicode 編碼
w := Ord(c); // 19975 (十進制)
w := Word(c); // 19975
s := Format('%.4x', [Ord(c)]); // '4E07' (十六進制字符串)
s := IntToHex(Ord(c), 4); // '4E07'
// Unicode 編碼 → 漢字
c := #19975; // '萬'
c := #$4E07; // '萬'
c := #$4e07; // '萬' (大小寫不敏感)
c := WideChar(19975); // '萬'
c := WideChar($4E07); // '萬'
end;
SizeOf(WideChar) = 2)#0..#65535 (#$0..#$FFFF)#0..#255)$4E00..$9FA5 (常用漢字)Length(c) 返回字符數 (1),SizeOf(c) 返回字節數 (2)
// 直接賦值 ANSI 字符 (≤#255)
c := 'B'; // 正常
// 直接賦值漢字字面量 (編譯器版本相關)
// c := '萬'; // 舊版 Delphi 不支持,D2009+ 支持
// 變通方案:從 WideString 取字符
c := WideString('萬')[1]; // '萬'
// 組合顯示多個 Unicode 字符
ShowMessage(#19975#19968); // '萬一'
ShowMessage(#19975 + #19968); // '萬一' (+ 號連接字符常量)
ShowMessage(#$4e07#$4e00); // '萬一'
| 操作 | 推薦方式 | 備註 |
|---|---|---|
| 字符→編碼 | Ord(c) 或 Word(c) | 統一使用 Ord |
| 編碼→字符 | Chr(n) 或 Char(n) | Chr 更語義化 |
| 十六進制顯示 | IntToHex(Ord(c), 4) | 固定 4 位 |
| 漢字字面量 | WideString('漢')[1] | 跨版本兼容 |
掌握這些轉換技巧,對處理文本編碼、串口通訊、文件解析、API 調用等場景至關重要。