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

Delphi 調用 WinAPI:CharToOem/OemToChar 字符集轉換

     編輯:Delphi

ANSI/OEM 字符集雙向轉換與緩衝區長度控制

CharToOem/OemToChar 及其 Buff 後綴版本實現 ANSI 與 OEM 字符集互轉。Buff 版本額外支援指定轉換字符數量。

核心函數對照

  • CharToOem / OemToChar:整串轉換
  • CharToOemBuff / OemToCharBuff:指定長度轉換

完整示例(四種調用方式)

procedure TForm1.Button1Click(Sender: TObject);  {PWideChar → AnsiChar 數組}
var Buf: PWideChar; AnsiBuf: array[0..255] of AnsiChar;
begin
  Buf := '萬一的 Delphi 博客';
  CharToOem(Buf, AnsiBuf);          ShowMessage(string(AnsiBuf)); {完整轉換}
  FillChar(AnsiBuf, Length(AnsiBuf), #0);
  CharToOemBuff(Buf, AnsiBuf, 6);   ShowMessage(string(AnsiBuf)); {前 6 字符}
end;

procedure TForm1.Button2Click(Sender: TObject);  {PChar → 動態分配 PAnsiChar}
var str: string; p: PAnsiChar;
begin
  str := '萬一的 Delphi 博客';
  p := GetMemory(256);
  CharToOem(PChar(str), p);     ShowMessage(string(p));
  FreeMemory(p);
  p := GetMemory(256);
  CharToOemBuff(PChar(str), p, 6); ShowMessage(string(p));
  FreeMemory(p);
end;

procedure TForm1.Button3Click(Sender: TObject);  {PAnsiChar → Char 數組}
var AnsiBuf: PAnsiChar; Buf: array[0..255] of Char;
begin
  AnsiBuf := '萬一的 Delphi 博客';
  OemToChar(AnsiBuf, Buf);      ShowMessage(string(Buf));
  FillChar(Buf, Length(Buf), #0);
  OemToCharBuff(AnsiBuf, Buf, 6); ShowMessage(string(Buf));
end;

procedure TForm1.Button4Click(Sender: TObject);  {AnsiString → StrAlloc 緩衝區}
var AnsiStr: AnsiString; p: PChar;
begin
  AnsiStr := '萬一的 Delphi 博客';
  p := StrAlloc(256);
  OemToChar(PAnsiChar(AnsiStr), p);   ShowMessage(string(p));
  StrDispose(p);
  p := StrAlloc(256);
  OemToCharBuff(PAnsiChar(AnsiStr), p, 6); ShowMessage(string(p));
  StrDispose(p);
end;

記憶體管理: 動態分配緩衝區(GetMemory/StrAlloc)使用後必須配對釋放(FreeMemory/StrDispose)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved