求字符的转换 ( 积分: 300 )

  • 主题发起人 主题发起人 yellowyellow
  • 开始时间 开始时间
Y

yellowyellow

Unregistered / Unconfirmed
GUEST, unregistred user!
var s:string;

s:=#20445;可以得到"保"字

但是
var i:word;
i:=20445;
copymemory(@s[1],@i,2);
得到的并不是想要的字~请问是不是DELPHI自动转换了内码还是什么~?~~

本人需要在HTML内将 &#20445
的格式复原成string
求更高手的人解
 
在直接
s:=#20445的时候
s[1] 与 s[2]的byte值并不能还原到20445.....请问这是怎么回事
 
#20445是汉字编码,在内存中可能并不是保存立即数,看有没有高手能解释。
 
奇怪,我现在新D6,D7没有这个样子了。。。不是编码,是不是和操作系统有关系?
 
老蓝随便找个带汉字的dfm文件用记事本打开看里面的汉字,应该是编码。
 
setlength(s,2);
s[1]:=chr(lo(i));
s[2]:=chr(hi(i));
 
参考下面的二个函数
//UniCode -> 汉字
Function UniCode2Chinese(AiUniCode : Integer) : String;
Var
ch, cl : String[3];
s : String;
Begin
s := IntToHex(AiUniCode, 2);
cl := '$' + Copy(s, 1, 2);
ch := '$' + Copy(s, 3, 2);
s := Chr(StrToInt(ch)) + Chr(StrToInt(cl)) + #0;
Result := WideCharToString(pWideChar(s));
end;

//汉字 -> UniCode
Function Chinese2UniCode(AiChinese : String) : Integer;
Var
ch, cl : String[2];
a : array [1..2] of char;
Begin
StringToWideChar(Copy(AiChinese, 1, 2), @(a[1]), 2);
ch := IntToHex(Integer(a[2]), 2);
cl := IntToHex(Integer(a[1]), 2);
Result := StrToInt('$' + ch + cl);
end;
 
汉字在内存中占两个字节,也就是说s:=#20445中的20445实际上是内存值而不是内存地址
 
幽默~~自己找到解了~~~

分值怎么处理~~谁来说说

实际上需要用widestring作为中介

#20445只是一个widestring 的char
需要先把它copymemory入一个widechar
才能让他自动转为string
不然就是乱码。。。。
 
虽然全都错,但是Power255转的比较接近,不过也没考虑到CodePage的问题,

其他全错只能给300分给Power了
 
后退
顶部