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中@ 什么意思