首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 字元與字串編碼轉換全攻略:Char、WideChar、Ord、Chr 實戰

     編輯:Delphi

Delphi 字元類型與編碼值互轉完整指南

Delphi 提供 Char/AnsiChar (1 位元組) 與 WideChar (2 位元組) 兩大字元類型,掌握它們與數值編碼 (Ordinal/Unicode) 的雙向轉換,是處理文字、解析協議、呼叫 API 的基礎技能。

AnsiChar (Char) 與編碼互轉


var
  b: Byte;
  c: Char;
begin
  // 字元 → 編碼值 (多種等價寫法)
  b := Ord('A');      // 65
  b := Ord(#65);      // 65
  b := Ord($41);      // 65
  b := Byte('A');     // 65  (直接類型轉換)
  b := Byte(#$41);    // 65

  // 編碼值 → 字元
  c := Chr(65);       // 'A'
  c := Chr($41);      // 'A'
  c := Char(65);      // 'A'
  c := Char($41);     // 'A'
end;

WideChar 與 Unicode 編碼互轉


var
  w: Word;
  c: WideChar;
  ws: WideString;
  s: string;
begin
  // 準備:取得漢字 '萬' 的 WideChar
  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); // '萬'

  // 組合顯示
  ShowMessage(#19975#19968);    // '萬一'
  ShowMessage(#$4e07#$4e00);    // '萬一'
end;

類型大小與範圍對照

常見陷阱與最佳實踐

1. 字面值直接賦值 WideChar


// 錯誤:'萬' 是 AnsiString 字面值,無法直接賦給 WideChar
// c := '萬';  // 編譯錯誤

// 正確:透過 WideString 中介
c := WideString('萬')[1];  // '萬'

2. 跨平台 Unicode 處理 (Delphi 2009+)


// 統一使用 string (UnicodeString) 與 Char (WideChar)
var
  s: string;      // UnicodeString
  c: Char;        // WideChar
begin
  s := '萬一';
  c := s[1];      // 直接可用,無需轉換
  // Ord(c) 直接得 Unicode 碼位
end;

3. API 呼叫時的字元類型選擇

類型大小範圍別名
Char / AnsiChar1 Byte#0..#255 ($00..$FF)Ansi 字元
WideChar2 Bytes#0..#65535 ($0000..$FFFF)UTF-16 代碼單元

實用工具函數


// 取得字元 Unicode 碼位 (十六進制 4 位)
function CharToHex4(const C: WideChar): string;
begin
  Result := IntToHex(Ord(C), 4);
end;

// 從 Unicode 碼位建立字元
function Hex4ToChar(const Hex4: string): WideChar;
begin
  Result := WideChar(StrToInt('$' + Hex4));
end;

// 批次轉換字串為 Unicode 碼位陣列
function StringToCodePoints(const S: string): TArray<Integer>;
var
  i: Integer;
begin
  SetLength(Result, Length(S));
  for i := 1 to Length(S) do
    Result[i-1] := Ord(S[i]);
end;

熟練掌握 Ord/Chr/Byte/Word/WideChar 互轉,配合 IntToHex/Format 格式化,能輕鬆應對字元編碼診斷、協議解析、舊碼遷移等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
API 類型對應 Delphi 類型轉換方式
ANSI API (結尾 A)PAnsiChar / AnsiStringPAnsiChar(AnsiStr)
Unicode API (結尾 W)PWideChar / stringPWideChar(Str)