(其中 lpStr 是要轉換的原始UNICODE 字串,pBuff 是用于存放轉換結果的緩沖區)
void CopyWchar(LPCWSTR lpStr, WORD *pBuff)
{
int nCount, nLen = 0;
nCount = wcslen(lpStr);
WCHAR ch;
for(int i=0; i<nCount; i++)
{
ch = lpStr[i];
if(ch >= 0x80)
{
if(ch <= 0xFF)
ch -= 0x80;
else if(ch >= 0x2000 && ch <= 0x266F)
ch = ch - 0x2000 + 128;
else if(ch >= 0x3000 && ch <= 0x33FF)
ch = ch - 0x3000 + 1648 + 128;
else if(ch >= 0x4E00 && ch <= 0x9FA5)
ch = ch - 0x4E00 + 1648 + 1024 + 128;
else if(ch >= 0xF900 && ch <= 0xFFFF)
ch = ch - 0xF900 + 1648 + 1024 + 20902 + 128;
ch += 128;
}
pBuff[i] = ch;
}
}
uj5u.com熱心網友回復:
procedure CopyWchar(lpStr: LPCWSTR; pBuff: Array of Word);
var
i, nCount, nLen: integer;
ch: Word;
begin
nLen := 0;
nCount := Length(lpStr);
for i := 0 to nCount - 1 do
begin
ch := Word(lpStr[i]);
if(ch >= $80) then
begin
if(ch <= $FF) then
ch := ch - $80
else if (ch >= $2000) and (ch <= $266F) then
ch := ch - $2000 + 128
else if(ch >= $3000) and (ch <= $33FF) then
ch := ch - $3000 + 1648 + 128
else if(ch >= $4E00) and (ch <= $9FA5) then
ch := ch - $4E00 + 1648 + 1024 + 128
else if(ch >= $F900) and (ch <= $FFFF) then
ch := ch - $F900 + 1648 + 1024 + 20902 + 128;
ch := ch + 128;
end;
pBuff[i] := ch;
end;
end;
uj5u.com熱心網友回復:
procedure CopyWchar(lpStr: PWideChar; out pBuff: array of Word);
var
i, nCount, nLen: Integer;
ch: Word;
begin
nCount := Length(lpStr);
for i := 0 to nCount - 1 do
begin
ch := Word((@lpStr[i])^);
if (ch >= $80) then
begin
if (ch <= $FF) then
ch := ch - $80
else if (ch >= $2000) and (ch <= $266F) then
ch := ch - $2000 + 128
else if (ch >= $3000) and (ch <= $33FF) then
ch := ch - $3000 + 1648 + 128
else if (ch >= $4E00) and (ch <= $9FA5) then
ch := ch - $4E00 + 1648 + 1024 + 128
else if (ch >= $F900) and (ch <= $FFFF) then
ch := ch - $F900 + 1648 + 1024 + 20902 + 128;
ch := ch + 128;
end;
pBuff[i] := ch;
end;
end;
// 呼叫測驗
procedure TForm1.btn1Click(Sender: TObject);
var
s: PWideChar;
d: array of Word;
i: Integer;
sW: string;
begin
s := '高密市型別水電費是否';
SetLength(d, Length(s));
CopyWchar(s, d);
for i := Low(d) to High(d) do
begin
sw := sw + 'd[' + IntToStr(i) + ']:=' + IntToStr(d[i]) + #13;
end;
ShowMessage(sW);
end;
uj5u.com熱心網友回復:
有警告else if (ch >= $F900) and (ch <= $FFFF) then // 這個判斷的結果永遠都是True
uj5u.com熱心網友回復:
請問
要怎麼在變回ASCII碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/133597.html
