首页
社区
课程
招聘
[求助]求一个汉字算法....
发表于: 2009-2-26 17:27 4470

[求助]求一个汉字算法....

2009-2-26 17:27
4470
如:  汉字: 看雪
   有什么方法可以把"看雪"两个中文转为每个中文两位数字, 并能以数字转换为中文.

   如: WideStringToAsscii 得出的是每个中文五位数字, 但位数超过了二位

function WideStringToAsscii(Val : WideString) : String;
var
    str :String;
    i:Integer;
begin
  str := '';
  Result := '';
  if Val  = '' then
    Exit;
  for i := 1 to Length(Val ) do
  begin
    str := '#' + IntToStr(Ord(Val [i]));
    Result := Result + str;
  end;
end;

谢谢.............

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
每一个中文汉字的Ascii占两个字节,相当于 WORD 类型数据,两个汉字占4个字节相当于 DWORD 类型数据,直接转换的话,用16进制表示也要8个数位。
如果用回到 DOS 时代的汉字区位码,可以使每一个字节都减小94,这样有可能将每一个汉字占的数位减少些,但两个数位(如 FF 最多表示 255 种状态,不可能表示出两人个汉字)。

除非将所有的汉字文本压缩再编码,才有可能达成你要的效果,但能否压缩到平均每个汉字占一个字节还是个问题。

你无非是想用常规的ASCII字符表示汉字,建议你用BASE64编码,BASE64编码后的长度会比原来的汉字要大(1/4~1/3左右)。

最后,若想直接用数字表示汉字的话,可以这样:

function WideStringToAsscii(Val : WideString) : String;
var pInt: PWORD;
    aVal: DWORD;
begin
  pInt := PWORD(PWChar(Val));
  Result := '';

  {在一个循环内反复执行以下两人行,直至字符结束,
   函数的返回值就输出了一串16进制字符串,
   每4位表示一个汉字}
  Result := Result + IntToHex(pInt^, 4);
  Inc(pInt);

end;
2009-2-26 18:00
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
谢谢, 如果没办法, 只能用其它办法了!!!!!!!!
2009-2-26 20:31
0
雪    币: 225
活跃值: (173)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
每个中文两位数字,也就是用两位数字来表示一个中文汉字,所以最多你只能使用0~99共100个汉字。
2009-2-27 15:02
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
两位数字是什么意思,像字符串“48”这个样子的?感觉好浪费啊。即使你把它存下来,也是2个字节,比如“4”是0x34,“8”是0x38。还不如直接用ansi或unicode,也是2个字节。
2009-2-27 16:16
0
游客
登录 | 注册 方可回帖
返回
//