PC利用串口通过手机发短信中的pdu的中文解码求教 ( 积分: 200 )

  • 主题发起人 主题发起人 nec
  • 开始时间 开始时间
N

nec

Unregistered / Unconfirmed
GUEST, unregistred user!
在网上找到以下资料可惜试过不行.请高手指教具体PDU中文解码代码.

function UnicodeToString(var AString: string; AUnicode: PChar; ALenth: integer): integer;
var
TmpBuf: array [1..1024] of char;
TmpChar: char;
TmpLen, i: integer;
begin
try
TmpLen := ALenth div 2;
if ALenth > 0 then
begin
CopyMemory(@TmpBuf, AUnicode, ALenth);
for i := 0 to TmpLen - 1 do
begin
TmpChar := (AUnicode + i * 2)^;
(AUnicode + i * 2)^ := (AUnicode + i * 2 + 1)^;
(AUnicode + i * 2 + 1)^ := TmpChar;
end;
TmpBuf[TmpLen * 2 + 1] := #0;
TmpBuf[TmpLen * 2 + 2] := #0;
AString := WideCharToString(pwidechar(AUnicode));
Result := TmpLen;
end
else
begin
Result := 0;
end;
except
AString := '';
Result := 0;
end;
end;
 
在网上找到以下资料可惜试过不行.请高手指教具体PDU中文解码代码.

function UnicodeToString(var AString: string; AUnicode: PChar; ALenth: integer): integer;
var
TmpBuf: array [1..1024] of char;
TmpChar: char;
TmpLen, i: integer;
begin
try
TmpLen := ALenth div 2;
if ALenth > 0 then
begin
CopyMemory(@TmpBuf, AUnicode, ALenth);
for i := 0 to TmpLen - 1 do
begin
TmpChar := (AUnicode + i * 2)^;
(AUnicode + i * 2)^ := (AUnicode + i * 2 + 1)^;
(AUnicode + i * 2 + 1)^ := TmpChar;
end;
TmpBuf[TmpLen * 2 + 1] := #0;
TmpBuf[TmpLen * 2 + 2] := #0;
AString := WideCharToString(pwidechar(AUnicode));
Result := TmpLen;
end
else
begin
Result := 0;
end;
except
AString := '';
Result := 0;
end;
end;
 
PDU中文解码
function uTos(strU:string):widestring;
var strLeng,i:integer;
wStr:string;
begin
strLeng:=length(strU) div 4 ;
wStr:='';
for i:=0 to strLeng -1 do
begin
wStr:=wStr+chr(strtoint('$'+copy(strU,i*4+3,2)))+chr(strtoint('$'+copy(strU,i*4+1,2)));
end;
Result:= WideCharToString(pWideChar(pchar(wstr)));
setlength(Result,strLeng);
end;
 
关于string->中文解码的帖子唐佐平笔记中有,查他的帖子。
 
接受答案了.
 

Similar threads

后退
顶部