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

如何把二进制字符串转换为ASCII字符串??

楼主talkingmute(CS-{Z})2005-04-06 13:07:30 在 C++ Builder / 基础类 提问

比如:  
  char   *data;  
  //data中放的是一些二进制字符串  
  如何把data字符串转换为ASCII字符串?显示在一个编辑框里Edit1中?? 问题点数:50、回复次数:16Top

1 楼talkingmute(CS-{Z})回复于 2005-04-07 08:58:18 得分 0

就算是很简单吧!希望大家帮助写下了!!Top

2 楼xrdsheng(旭日东升)回复于 2005-04-07 09:01:11 得分 0

不用管它是二进制还是....,把那些数据按每字节用串输出就行了,如  
  AnsiString   str;  
  str   =   (char*)data;  
  Edit1->Text=str;  
  Top

3 楼tompkins2000(AirHunter)回复于 2005-04-07 09:08:03 得分 50

转抄~~~~  
   
  //   字节数据转换为可打印字符串  
  //   如:{0xC8,   0x32,   0x9B,   0xFD,   0x0E,   0x01}   -->   "C8329BFD0E01"    
  //   pSrc:   源数据指针  
  //   pDst:   目标字符串指针  
  //   nSrcLength:   源数据长度  
  //   返回:   目标字符串长度  
  int   gsmBytes2String(const   unsigned   char*   pSrc,   char*   pDst,   int   nSrcLength)  
  {  
          const   char   tab[]="0123456789ABCDEF";         //   0x0-0xf的字符查找表  
           
          for(int   i=0;   i<nSrcLength;   i++)  
          {  
                  //   输出低4位  
                  *pDst++   =   tab[*pSrc   >>   4];  
           
                  //   输出高4位  
                  *pDst++   =   tab[*pSrc   &   0x0f];  
           
                  pSrc++;  
          }  
           
          //   输出字符串加个结束符  
          *pDst   =   '\0';  
           
          //   返回目标字符串长度  
          return   nSrcLength   *   2;  
  }  
  Top

4 楼talkingmute(CS-{Z})回复于 2005-04-07 09:52:41 得分 0

比如:  
  char   *data="0101101101011100";  
  AnsiString   s;  
  s=(char   *)data;  
  Edit1->Text=s;  
   
  这样写吗?还是输出二进制数!Top

5 楼talkingmute(CS-{Z})回复于 2005-04-07 09:54:13 得分 0

我现在就想知道如何在Edit1中显示的是八位二进制数对应的字符...Top

6 楼Maconel(Maconel)回复于 2005-04-07 10:04:06 得分 0

/***********************************  
  函数作用:  
          将一个里边由01字符组成的,长度为8的char数组,  
          转为一个ASCII字符。  
  参数:  
          const   char   szStr[8]  
                  长度为8的数组,注意传进来的数组长度至少要有8。  
          char*   cpRst  
                  返回的结果  
  返回值:  
          bool  
                  成功返回true,失败返回false。  
  ***********************************/  
  bool   BinToChar(const   char   szStr[8],   char*   cpRst)  
  {  
          char   cRtn   =   '\0';  
   
          if   (szStr   ==   NULL)   return   false;  
   
          for   (int   i=0;   i<8;   i++)  
          {  
                  if   (szStr[i]   !=   '0'   &&   szStr[i]   !=   '1')   return   false;  
   
                  cRtn   =   szStr[i]   -   48;  
                  cRtn   =   cRtn   <<   (8   -   i   -   1);  
                  *cpRst   |=   cRtn;  
          }  
   
          return   true;  
  }  
  //---------------------------------------------------------------------------  
  /***********************************  
  函数作用:  
          将一个里边由01字符组成的char*字符串,  
          转为由对应的ASCII字符组成的AnsiString字符串。  
  参数:  
          const   char*   szStr  
                  源字符串,注意传进来的字符串长度应为8的倍数。  
          AnsiString*   spRst  
                  返回的结果  
  返回值:  
          bool  
                  成功返回true,失败返回false。  
  ***********************************/  
  bool   BinToStr(const   char*   szStr,   AnsiString*   spRst)  
  {  
          char   c   =   '\0';  
   
          //确保长度是8的整数  
          if   (szStr   ==   NULL   ||  
                  strlen(szStr)   %   8   !=   0)  
          {  
                  return   false;  
          }  
   
          //一次传进8个字符  
          while   (strlen(szStr)   >=   8)  
          {  
                  c   =   '\0';  
                  if   (!BinToChar(szStr,   &c))   return   false;  
                  *spRst   =   *spRst   +   AnsiString(c);  
                  szStr   +=   8;  
          }  
   
          return   true;  
  }  
  //---------------------------------------------------------------------------  
  //使用时  
  void   __fastcall   TForm1::Button1Click(TObject   *Sender)  
  {  
          char*   cpStr   =   "010000010100001001000011";  
          AnsiString   sRst;  
   
          BinToStr(cpStr,   &sRst);  
          Edit1->Text   =   sRst;  
  }  
  //---------------------------------------------------------------------------  
  Top

7 楼talkingmute(CS-{Z})回复于 2005-04-07 11:05:07 得分 0

万分感谢上边大哥!!  
  这里,我有些小疑问,就是众所周知,IP数据包里的内容应该是以二进制形式存在的吧?当我用一个字符指针就象上边的data指向它们时,里面是一些"0"和"1"字符的组合还是已经转换好的字符呢??而当我没有做任何转换时,直接把data放在一个AnsiString里时,有时可以显示字符信息,有时则是一些乱码,很想知道这乱码是怎么回事的!!  
  希望大家能继续帮助下!!Top

8 楼talkingmute(CS-{Z})回复于 2005-04-07 11:09:02 得分 0

当我按照上边程序那样做时,通过Edit1显示那IP数据包时,则什么也没有,也就是说里面已经不再是二进制字符了,可是为什么还有乱码呢??郁闷...Top

9 楼fidt982(痴心绝对~0~)回复于 2005-04-07 11:21:07 得分 0

乱码是因为传过来的数据里面有中文,如果不含中文则会是对的  
   
  //////  
  我也正在处理同样的问题,正在寻找解决办法Top

10 楼talkingmute(CS-{Z})回复于 2005-04-07 11:36:03 得分 0

我那几次的数据里面也有中文的,是一些聊天信息,还有一些html文档内容和一些字符,  
   
  就是那乱码搞得比较郁闷,是因为那些数据加密了还是??  
   
  不知有没有办法把它们转换过来???  
   
   
  Top

11 楼fidt982(痴心绝对~0~)回复于 2005-04-07 12:29:52 得分 0

一个中文字符要占两个字节,  
  而英文字符只占一个字节,  
  所以碰到中文会出现乱码Top

12 楼fidt982(痴心绝对~0~)回复于 2005-04-07 19:59:47 得分 0

不好意思,我弄错了,我在数据传输过程中丢掉了的第一位,所以出现了乱码,  
  把二进制数组直接赋给字符串,不管是什么,都会原样写出来.Top

13 楼talkingmute(CS-{Z})回复于 2005-04-12 09:46:13 得分 0

to:   fidt982(~孤单的人~)    
  不好意思,这几天一直没有来..  
  我的部分代码如:  
    char   *Data;  
    Data=RecvBuf+IP_HdrLen(&ip)+TCP_HdrLen(&tcp);//RecvBuf是缓冲区的IP包内容,Data是IP数据包内容,IP_HdrLen和TCP_HdrLen是得到IP头和TCP头的长度  
  Memo1->Lines->Add(Data);//把IP数据包内容显示在Memo1中  
   
  Memo1中显示的大部分是些乱码,除了一些html文件和一些聊天信息是字符和中文的...  
  不知其他朋友有什么见解????Top

14 楼fidt982(痴心绝对~0~)回复于 2005-04-12 12:43:16 得分 0

IP_HdrLen(&ip)+TCP_HdrLen(&tcp);//  
   
  你后面加这个长度有什么用,,不明白?  
   
  Top

15 楼icwin(www.cat898.com.cn)回复于 2005-04-15 20:47:57 得分 0

upTop

16 楼talkingmute(CS-{Z})回复于 2005-05-13 14:53:27 得分 0

to:fidt982(~孤单的人~)    
  不好意思,最近在做毕设,很久没来了...  
  加那个长度就是过滤到IP头和TCP头的,直接显示里面的内容  
  现在问题就是,我得到的包里面内容很乱,有些包长度很小,可是里面的数据很多,有些包长度很大,可是里面的数据却比较小,不知是怎么回事??  
  char   *Data;  
    Data=RecvBuf+IP_HdrLen(&ip)+TCP_HdrLen(&tcp);//RecvBuf是缓冲区的IP包内容,Data是IP数据包内容,IP_HdrLen和TCP_HdrLen是得到IP头和TCP头的长度  
  这里,是不是要对Data这块再做以调整?根据每一个IP包的大小来做些偏移或者??  
   
  希望大家都来讨论下!Top

相关问题

  • 怎样将二进制转换成字符串?在线等待。。。
  • 字符串转二进制
  • 如何将十六进制的字符串转换为二进制的字符串?
  • 讨论:把字符串转换为二进制再输出的算法
  • 请问将字符串转换成二进制的函数是什么?
  • js怎样将一组二进制字符串101110100转换为二进制值,进而转换为十进制值?
  • 如何在一个字符串如“100101”和二进制数100101之间互相转换?
  • 一个简单的问题,字符串转换成二进制流.UP有分,在线等待。急
  • 请问怎样将一个double型数据的小数位的二进制数据转换成字符串?
  • 初学者请教,编写一段代码,把十进制数转换成二进制字符串!~

关键词

  • 二进制
  • 字符
  • 乱码
  • 转换
  • 数据
  • 中文
  • 指针
  • 内容
  • tcp
  • 字符串

得分解答快速导航

  • 帖主:talkingmute
  • tompkins2000

相关链接

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

广告也精彩

反馈

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