S
SS2000
Unregistered / Unconfirmed
GUEST, unregistred user!
var s: string;
ws: WideString;
对于这两个变量的转化,Delphi作的很好,只需要
s := ws;
//or
ws := s;
就可以正确的把Ansi字符串转换成Wide(UCS2)字符串.
不过,有个问题却让我头疼,当收到的是 USC2 字符串内存的内容,
但是保存在一个string变量里面,如何转换成 USC2 字符串?
其实非常简单,但是不能用上面的方法,而是用内存复制.
SetLength(ws,Length(s) div 2)
Move(s[1],ws[1],length(s1));
呵呵,就这么简单,但是,却把我搞惨了,因为,我收到的UCS2编码
是从联通手机发上来的,它的UCS2编码的俩个字节顺序是相反的!!
以下是我收到的联通手机的USC2编码的真实内容
004F6062535F007684662F5E788FD0000A4F60653652307684662F795D798F000A4F60770B52307684662F5E0C671B000A4F6063094E0B7684662F54097965000A4F604F534F1A7684662F7F8E597D000A4F60611F89C97684662F6E2999A8000A795D4F6057238BDE5FEB4E500020514365E65FEB4E5000200020592959295FEB4E5000
注意 这是16进制编码,使用的时候先要转换成内存数据.
注意 头两个00没用和后两个00,必须去掉,我也不知道为什么(谁知道请告诉我)
下面是显示代码,你会得到一个惊喜.
procedure TForm1.Button4Click(Sender: TObject);
var s,s2: string;
i,len: integer;
us: string;
ch: array[0..1] of byte;
begin
s := '4F6062535F007684662F5E788FD0000A4F60653652307684662F795D798F000A4F6077' +
'0B52307684662F5E0C671B000A4F6063094E0B7684662F54097965000A4F604F534F1A' +
'7684662F7F8E597D000A4F60611F89C97684662F6E2999A8000A795D4F6057238BDE5F' +
'EB4E500020514365E65FEB4E5000200020592959295FEB4E50';
len := Length(s);
for i := 0 to len div 4 - 1 do
begin
s2 := Copy(s,i*4+1,2);
ch[1] := StrToInt('$' + s2);
s2 := Copy(s,i*4+3,2);
ch[0] := StrToInt('$' + s2);
us := us + WideChar(ch);
end;
showmessage(us);
end;
ws: WideString;
对于这两个变量的转化,Delphi作的很好,只需要
s := ws;
//or
ws := s;
就可以正确的把Ansi字符串转换成Wide(UCS2)字符串.
不过,有个问题却让我头疼,当收到的是 USC2 字符串内存的内容,
但是保存在一个string变量里面,如何转换成 USC2 字符串?
其实非常简单,但是不能用上面的方法,而是用内存复制.
SetLength(ws,Length(s) div 2)
Move(s[1],ws[1],length(s1));
呵呵,就这么简单,但是,却把我搞惨了,因为,我收到的UCS2编码
是从联通手机发上来的,它的UCS2编码的俩个字节顺序是相反的!!
以下是我收到的联通手机的USC2编码的真实内容
004F6062535F007684662F5E788FD0000A4F60653652307684662F795D798F000A4F60770B52307684662F5E0C671B000A4F6063094E0B7684662F54097965000A4F604F534F1A7684662F7F8E597D000A4F60611F89C97684662F6E2999A8000A795D4F6057238BDE5FEB4E500020514365E65FEB4E5000200020592959295FEB4E5000
注意 这是16进制编码,使用的时候先要转换成内存数据.
注意 头两个00没用和后两个00,必须去掉,我也不知道为什么(谁知道请告诉我)
下面是显示代码,你会得到一个惊喜.
procedure TForm1.Button4Click(Sender: TObject);
var s,s2: string;
i,len: integer;
us: string;
ch: array[0..1] of byte;
begin
s := '4F6062535F007684662F5E788FD0000A4F60653652307684662F795D798F000A4F6077' +
'0B52307684662F5E0C671B000A4F6063094E0B7684662F54097965000A4F604F534F1A' +
'7684662F7F8E597D000A4F60611F89C97684662F6E2999A8000A795D4F6057238BDE5F' +
'EB4E500020514365E65FEB4E5000200020592959295FEB4E50';
len := Length(s);
for i := 0 to len div 4 - 1 do
begin
s2 := Copy(s,i*4+1,2);
ch[1] := StrToInt('$' + s2);
s2 := Copy(s,i*4+3,2);
ch[0] := StrToInt('$' + s2);
us := us + WideChar(ch);
end;
showmessage(us);
end;