当前位置:编程学习 > Delphi >>

delphi 字符编码问题

要把 '个人资料' 转成'FE-03-8E-04-18-43-6D-1B' 这样的。是怎么实现的,中间有涉及到unicode编码。 c#代码为: private static string ConvertTitle(string s) { byte[] data = Encoding.Unicode.GetBytes(s); return BitConverter.ToString(data); } 它调用过进去的s 不是明文的'个人资料',也是一堆乱码,不好复制,经过这个函数后就是出来'FE-03-8E-04-18-43-6D-1B'这个字符串,我从接口资料里能看出是代码这四个中文就是'个人资料'。 请大家帮我分析分析,没结果的给个思路也好,有结果了我再加分,谢谢大家
补充:要用Delphi代码来实现
追问:高手呀,你QQ多少,我想就这个问题再咨询下。我的是delphi7,请问要怎么转呢
其他:“个人资料”的UTF-16LE编码的字节序列是:2A 4E BA 4E 44 8D 99 65,其中两个字节表示一个汉字,这4个16位数与FE-03-8E-04-18-43-6D-1B中蕴藏的4个16位数差值均为4A2C,说明这个编码规则很简单,就是UTF-16LE编码减去常数4A2C。

程序的具体写法和Delphi版本有关,主要分Delphi 2009之后还是之前,你的版本是? 给你写了两个函数

function Encode16(const sourstr : string) : string;  //把字符串转换成十六进制编码
var
  i : integer;
begin
  result := '';
  for i := 0 to length(sourstr) - 1 do
  begin
    result := result + IntToHex(ord(sourstr[i+1]),2) ;
  end;
end;

function Decode16(const SourStr : string) : string;  //把用Encode16编码过的字串还原
var
  i ,j: integer;
begin
  result := '';
  j := 0;
  for i := 0 to length(sourstr) - 3 do
  begin
    result := result + chr(StrToInt('$' + copy(sourStr,j+1,2)));
    j := j + 2;
    if j >= length(sourstr) then
      break;
  end
end;

调用方法:

var
  tmp,buf : string;
begin
  tmp := 'hello,world!';
  buf := Encode16(tmp); //68656C6C6F2C776F726C6421
  tmp := Decode16(buf); //hello,world!
end;
 

上一个:0~9数字中排列七位数两个元素一样,用delphi程序实现有多少组?怎样编程并求答案
下一个:delphi中@ 什么意思

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,