CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

两段小代码 看不出有什么不同,就是结果不同,奇怪

楼主wxj6688(wxj6688)2004-11-03 14:54:02 在 Delphi / VCL组件开发及应用 提问

1:利用String   类型“可以实现”汉字与16进制的相互转化  
  Function   TForm1.MyStrToHex(Str:String):String;  
  var  
          i:Integer;  
  begin  
          for   i:=1   to   Length(Str)   do  
                  Result:=Result+IntToHex(Ord(Str[i]),2);  
  end;  
   
  Function   TForm1.MyHexToStr(Hex:String):String;  
  var  
          i:Integer;  
  begin  
          for   i:=1   to   Length(Hex)   div   2   do  
                  Result:=Result+Chr(StrToInt('$'+Hex[2*i-1]+Hex[2*i]));  
  end;  
   
  2:利用WideString   类型“无法实现”汉字与16进制的相互转化  
  Function   TForm1.MyStrToHex(Str:WideString):WideString;  
  var  
          i:Integer;  
  begin  
          for   i:=1   to   Length(Str)   do  
                  Result:=Result+IntToHex(Ord(Str[i]),2);  
  end;  
  Function   TForm1.MyHexToStr(Hex:WideString):WideString;  
  var  
          i:Integer;  
  begin  
          for   i:=1   to   Length(Hex)   div   2   do  
                  Result:=Result+Chr(StrToInt('$'+String(Hex)[2*i-1]+String(Hex)[2*i]));  
  end;  
   
  问题:为什么??? 问题点数:0、回复次数:14Top

1 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2004-11-03 15:01:15 得分 0

你看看   这个Ord(Str[i]),   是多少<WideStrign下。。Top

2 楼wxj6688(wxj6688)回复于 2004-11-03 15:04:16 得分 0

那么应该怎么来解决呢??Top

3 楼micher_yan(人在江湖飘)回复于 2004-11-03 15:04:36 得分 0

widestring是双字节类型,哪怕“a”它都用两个字节表示,“字”也用两个字节,Top

4 楼wxj6688(wxj6688)回复于 2004-11-03 15:22:19 得分 0

各位好汉快帮我一下,怎么才能处理好呢???Top

5 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2004-11-03 15:26:09 得分 0

Result+IntToHex(Ord(BYTE(Str[i])),2);   使一个WideString<一个WORD>   ->   一个BYTE...  
  Top

6 楼minjunw(minjunw)回复于 2004-11-03 15:31:10 得分 0

对于WideString应该是  
  Function   TForm1.MyStrToHex(Str:WideString):String;  
  var  
          i:Integer;  
  begin  
          for   i:=1   to   Length(Str)   do  
                  Result:=Result+IntToHex(Ord(Str[i]),4);  
  end;  
  Function   TForm1.MyHexToStr(Hex:String):WideString;  
  var  
          i:Integer;  
  begin  
          for   i:=1   to   Length(Hex)   div   4   do  
                  Result:=Result+Chr(StrToInt('$'+Hex[4*i-3]+Hex[4*i-2]+Hex[4*i-1]+Hex[4*i]));  
  end;Top

7 楼wxj6688(wxj6688)回复于 2004-11-03 15:41:56 得分 0

to:     minjunw(minjunw)    
  我实验一下,发现只能转化进行单字节与16进制的转化,无法进行双字节与16进制的转化Top

8 楼wxj6688(wxj6688)回复于 2004-11-03 15:52:16 得分 0

//将汉字串转化为16进制   ->   OK  
  Function   TForm1.MyStrToHex(Str:String):WideString;  
  var  
          i:Integer;  
  begin  
          for   i:=1   to   Length(Str)   do  
                  Result:=Result+IntToHex(Ord(Str[i]),0);  
  end;  
   
  //将16进制转化为汉字串   ->   失败  
  Function   TForm1.MyHexToStr(Hex:String):WideString;  
  var  
          i:Integer;  
  begin  
          for   i:=1   to   Length(Hex)   div   4   do  
                  Result:=Result+Chr(StrToInt('$'+Hex[4*i-3]+Hex[4*i-2]+Hex[4*i-1]+Hex[4*i]));  
  end;  
  Top

9 楼wxj6688(wxj6688)回复于 2004-11-03 17:12:53 得分 0

//将任意字符串转化为16进制   ->   OK  
  Function   TForm1.MyStrToHex(Str:WideString):WideString;  
  var  
          PStr:PChar;  
          i:Integer;  
  begin  
          GetMem(PStr,MAX_PATH);  
          StrPCopy(PStr,String(Str));  
          for   i:=1   to   Length(PStr)   do  
                  Result:=Result+IntToHex(Ord(String(PStr)[i]),2);  
          FreeMem(PStr);  
  end;  
  以上为正向转化->成功  
   
  但是利用WideString类型将16进制   反向   转化为汉字还没有修改好,请各位帮忙Top

10 楼miky(miky)回复于 2004-11-03 18:19:10 得分 0

unction   TForm1.UnicodeHexToStr(const   asUnicodeHex:   string):   string;  
  var  
      i:   Integer;  
      sTemp:   string;  
  begin  
      //“中国网管程序:操作说明”的Unicode编码16进制为:  
      //4E2D   56FD   7F51   7BA1   7A0B   5E8F   FF1A   64CD   4F5C   8BF4   660E  
      for   i   :=   1   to   Length(asUnicodeHex)   do  
      begin  
          if   i   mod   4   =   0   then  
          begin  
              sTemp   :=   Copy(asUnicodeHex,   i   -   3,   4);  
              sTemp   :=   WideChar(StrToIntDef('$'   +   sTemp,   0));  
              Result   :=   Result   +   sTemp;  
          end;  
      end;  
  end;  
  Top

11 楼phy(被爱捶死)回复于 2004-11-03 18:26:29 得分 0

呵呵,这么多人已经帮忙了,我帮忙顶。。。少给点。。。哈哈,多了我受不起。。Top

12 楼wxj6688(wxj6688)回复于 2004-11-04 11:10:40 得分 0

各位老兄:  
  1:利用WideString   将   汉字   正向   转化为   16进制   已经解决,  
  2:利用WideString   进行反向转化还是失败,以上方法均要求必须采用   WideString   才可以的呀?  
  Top

13 楼wxj6688(wxj6688)回复于 2004-11-04 11:17:13 得分 0

请各位老兄注意:  
  2:利用WideString   进行反向转化还是失败,  
        要求必须采用   WideString   类型   做传入参数,传出结果也必须为   WideString   类型  
  Top

14 楼wxj6688(wxj6688)回复于 2004-11-04 12:51:23 得分 0

还是要自己动手才性呀。。。。。  
   
  2:利用WideString   进行   16进制   反向转化   为汉字   ---   OK  
  Function   TForm1.MyHexToStr(Hex:WideString):WideString;  
  var  
          PHex:PChar;  
          i:Integer;  
          tmp,tmp1,tmp2:WideString;  
  begin  
          GetMem(PHex,MAX_PATH);  
              StrPCopy(PHex,String(Hex));  
              for   i:=1   to   Length(PHex)   div   2   do  
                      Result:=Result+Chr(StrToInt('$'+String(PHex)[2*i-1]+String(PHex)[2*i]));  
              Result:='';  
              i:=1;  
              while   i<=Length(PHex)   do  
                    begin  
                          tmp:=Copy(String(PHex),i,1);  
                          if   tmp>='A'   then  
                                begin   //双字节  
                                        tmp:=Chr(StrToInt('$'+Copy(String(PHex),i,2)))+   Chr(StrToInt('$'+Copy(String(PHex),i+2,2)));  
                                        Result:=Result+tmp;  
                                        i:=i+4;  
                                end  
                          else  
                                begin  
                                        tmp:=Chr(StrToInt('$'+Copy(String(PHex),i,2)));  
                                        Result:=Result+tmp;  
                                        i:=i+2;  
                                end;  
                    end;  
          FreeMem(PHex);  
  end;  
   
  Top

相关问题

  • 这段代码有问题吗?我怎么看不出来
  • 4行代码,出错,看不出来为什么!
  • 一个奇怪的变成问题,代码并不难,就是结果奇怪
  • 奇怪的问题,睡了一觉还是看不出那里出错
  • 这段代码我愣是看不出问题来,但执行为什么总报错?
  • 各位高手来帮小弟一把,我实在看不出这段代码有什么错
  • 奇怪了??看代码:
  • 一段奇怪的代码
  • 同代码,不同结果
  • 奇怪的现象!请看原代码!

关键词

  • 转化
  • 汉字
  • widestring
  • phex
  • hex
  • mystrtohex
  • myhextostr
  • strtoint
  • 进制
  • inttohex

得分解答快速导航

  • 帖主:wxj6688

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo