手头有两个函数,分别如下:
Function MyUnicode(SMSG:string):String;
var
  st:String;
  i:integer;
  a:UCS4String;
  b,c:LongWord;
  MyCh:char;
begin
  a:=WideStringToUCS4String(SMSG);
  st:='';
  i:=0;
  b:=a[i];
  while b>0 do begin
     c:=b mod 65536;
     mych:=char(c div 256);
     st:=st+mych;
     mych:=char(c mod 256);
     st:=st+mych;
     i:=i+1;
     b:=a[i];
  end;
  Result:=st;
end;Function StrToUnicode(Str: string):string;
var
    t:widestring;
    i:integer;
    h,l:byte;
begin
    t:=widestring(Str);
    Result := '';
    for i:=1 to length(t) do
      begin
        h:=hi(ord(t[i]));
        l:=lo(ord(t[i]));
        Result := Result+ inttohex(h,2)+inttohex(l,2);
      end;
end;
其中StrToUnicode('你好')得到的结果是4F60597D
而MyUnicode('你好')得到的结果是 O`Y} 我不太明白,这里边,哪个的结果才是正常的呢?
请哪位大侠帮忙回答一下好吗?

解决方案 »

  1.   

    可是我用这两个函数,在Cdma手机的Unicode模式下编码发送中文短信,事实证明MyUnicode函数编出的码是正确的啊,我有点迷惑,不知可否解惑
      

  2.   

    不过你得出来的结果是采用Big-Endian来表示的,而我们一般的CPU都是采用Little-Endian来表示的
      

  3.   

    同意Microsnow(冰火) 的高见,Intel的cpu用的是Little-Endian,所以需要每个双字的高低字节交换一下
      

  4.   

    谢谢两位,那是不是说我现在两个函数得到的结果是一致的,只不过是采用了不同的表达方式,是吗?我初次接触这种东西,可否给点资料让我更多的了解一下这个Big-Endian和Little-Endian的相同和不同之处吗?谢谢,给个链接也可,发到信箱也可,[email protected]
      

  5.   

    谢谢两位,那是不是说我现在两个函数得到的结果是一致的,只不过是采用了不同的表达方式,是吗?我初次接触这种东西,可否给点资料让我更多的了解一下这个Big-Endian和Little-Endian的相同和不同之处吗?谢谢,给个链接也可,发到信箱也可,[email protected]
      

  6.   

    http://blog.chinaunix.net/article.php?articleId=1271&blogId=652
    http://edu.tmn.cn/html/5/47/185/2005218/181849.htm