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)。