CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

ASCII,HEX串转换问题……SOS。

楼主sinth(Solitray Wolf)2003-10-04 11:18:38 在 C++ Builder / 基础类 提问

我现有如下的Hex串:  
  0x69   0x2D     0x58   ……  
  或:  
  4C   6D   2F   3D   ……  
  等不等长Hex串,请问题C/C++中有没有现成的函数将其转换成  
  ASCII串,如没有,请问题这个函数该怎么写? 问题点数:20、回复次数:10Top

1 楼zihan(子寒)回复于 2003-10-04 12:31:34 得分 1

没有,自己解析了。解析成一个个的16进制,然后转换。Top

2 楼binue()回复于 2003-10-04 15:35:02 得分 1

upTop

3 楼pheavecn(C超)回复于 2003-10-07 11:26:03 得分 1

IntToHex可以转成16进制。  
  IntToStr转成10进制。Top

4 楼FallenAngel(发愣的安琪儿)回复于 2003-10-07 17:01:22 得分 1

不懂,你的0x69   0x2D     0x58   ……  
  或:  
  4C   6D   2F   3D   ……  
  是字符串呢还是就是一个一个单独的HexTop

5 楼sinth(Solitray Wolf)回复于 2003-10-07 20:13:02 得分 0

字符串,有什么好的办法吗?Top

6 楼ljianq(泉深水清)回复于 2003-10-08 08:40:23 得分 1

一、         int   m=0x2D;  
                  Edit1->Text=m;       //Edit1->Text="45";  
  二、         Edit1->Text=StrToInt("0x2D");//Edit1->Text="45";Top

7 楼sinth(Solitray Wolf)回复于 2003-10-20 03:44:12 得分 0

upTop

8 楼fatwave(风中的雨)回复于 2003-10-20 09:08:17 得分 15

/*********************************进制转换**********************************/  
  //---------------------------------------------------------------------------  
  int     communication::HtoD(unsigned   char   *hex_str,   unsigned   char   *bin_str)  
  /*  
        "ba087d4012345678"   ->   {0xba,   0x08,   0x7d,   0x40,   0x12,   0x34,   0x56,   0x78}  
        For   ASCII   string   and   OS,   not   for   EBCDIC   string   and   OS.  
        Return:     >   0   ---   bin_str   length  
                          <   0   ---   error  
   
        M.L.Y     1999.12.28  
  */  
  {  
      int     i,   j,   n;  
      int     c1,   h1,   h2;  
      unsigned   char   *sh   =   hex_str,   *sb   =   bin_str;  
   
      n   =   strlen(sh);  
      if(n   <   2)   return   -1;  
      if(n   %   2   !=   0)   return   -2;  
      for(i   =   0,   j   =   0;   i   <   n;   j++)  
      {  
          if((h1   =   hex_to_num(sh[i++]))   <   0)   return   -1;  
          if((h2   =   hex_to_num(sh[i++]))   <   0)   return   -1;  
          c1   =   h1   <<   4   |   h2;  
          sb[j]   =   c1;  
      }  
      return   j;  
  }  
   
  //---------------------------------------------------------------------------  
  int     communication::DtoH(unsigned   char   *bin_str,   int   len,   unsigned   char   *hex_str)  
  /*  
        {0xba,   0x08,   0x7d,   0x40,   0x12,   0x34,   0x56,   0x78}   ->   "ba087d4012345678"  
        For   ASCII   string   and   OS,   not   for   EBCDIC   string   and   OS.  
        Return:     >   0   ---   hex_str   length  
                          <   0   ---   error  
   
        M.L.Y     1999.12.28  
        #include   <stdio.h>       标准库  
  */  
  {  
      int     i,   j;  
      unsigned   char   *sb   =   bin_str,   *sh   =   hex_str;  
   
      for(i   =   0,   j   =   0;   i   <   len;   i++,   j+=2)  
          sprintf((char   *)sh+j,   "%02X",   sb[i]);  
      sh[j]   =   NULL;  
      return   j;  
  }  
   
  //---------------------------------------------------------------------------  
  int     communication::hex_to_num(char   hex1char)  
  /*  
        'a'   or   'A'   ->   10,   '1'   ->   1  
        If   hex1char   not   in   '0'-'9','A'-'F','a'-'f'   return   -1  
  */  
  {  
      if(hex1char   >=   '0'   &&   hex1char   <=   '9')   return   hex1char   -   '0';  
      if(hex1char   >=   'A'   &&   hex1char   <=   'F')   return   hex1char   -   'A'   +   10;  
      if(hex1char   >=   'a'   &&   hex1char   <=   'f')   return   hex1char   -   'a'   +   10;  
      return   -1;  
  }  
  Top

9 楼sinth(Solitray Wolf)回复于 2003-10-26 05:27:10 得分 0

楼主的这个弱智一点,如果中间有空格,0x的话将得不到正确结果,  
  我自己写了一个,可能运行效率有一点低,谁能帮我优化一下,谢了!!  
   
   
   
  String   HexToStr(String   hs){//转换HEX串到ASCII串  
  String   hst="   xX",t1,t2;  
  String   hst1="1234567890abcdefABCDEF";  
  hs=Trim(hs);  
  char   ch;  
        for(int   i=1;i<=hs.Length();i++){  
                if(hs.SubString(i,2)=="0x"||hs.SubString(i,2)=="0X")//如果为0x  
                      {t1=hs.SubString(i,2);i=i+1;continue;}               //则进入下次循环  
   
                if(hst1.Pos(hs.SubString(i,1))!=0)//标准HEX数则连接  
                      {  
                          t1=t1+hs.SubString(i,1);}  
                else  
                      {if(hst.Pos(hs.SubString(i+1,1))!=0)//如果下一位还是  
                            {t1=t1+hs.SubString(i,1);continue;}//分隔符则继续连接  
   
                      if(hst.Pos(hs.SubString(i,1))!=0)//分隔标志则构造目标串  
                            {ch=strtol(t1.c_str(),NULL,16);  
                            t2=t2+ch;  
                            t1="";}  
                    else//否则其它符号则返回NULL    
                        return   NULL;  
                }  
        }  
    ch=strtol(t1.c_str(),NULL,16);  
    t2=t2+ch;  
    return   t2;  
  }Top

10 楼sinth(Solitray Wolf)回复于 2003-10-27 06:46:27 得分 0

没人帮忙算了,结帐!Top

相关问题

  • HEX转换为ASCII
  • HEX与ASCii码是如何转换的,用哪个函数?
  • 如何把二进制字符串转换为ASCII字符串??
  • JavaScript如何能把ASCII转换在字符串?
  • 怎么样把字符串转换成ascii码
  • 将一串字符转换为ASCII码的方法或函数。
  • 怎样把一字符串转换为ASCII?
  • vb.net中字符串如何转换为ascii形式?
  • vc中如何实现字符串转换出ascii码(紧急)
  • ascII码的问题,字符串怎么和ascII码相互转换?

关键词

  • 转换
  • os
  • hex
  • ascii
  • 进制
  • 问题
  • edit
  • unsigned
  • str
  • bin

得分解答快速导航

  • 帖主:sinth
  • zihan
  • binue
  • pheavecn
  • FallenAngel
  • ljianq
  • fatwave

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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