CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

怎样转换到CString?

楼主shuichong(睡虫)2003-01-02 07:53:03 在 VC/MFC / 网络编程 提问

发送结构:  
  char   buffer[1024];  
  SLZZ_PACK_STRUCT   *toBank=(SLZZ_PACK_STRUCT   *)buffer;  
  strcpy(toBank->PackFlag,"S0");  
  strcpy(toBank->DeviceId,"zz");  
  strcpy(toBank->SourceId,"zdsbhzdsbhzdsbhzdsbhzdsbhzdsbh");  
  ...  
  m_pSocket->Send(buffer,sizeof(SLZZ_PACK_STRUCT),0);//  
   
  接收:  
  char   bu[1024];  
  m_pSocket->Receive(bu,sizeof(bu),0);  
  SLZZ_PACK_STRUCT*   FromBank;  
  memcpy(FromBank->TrType,((SLZZ_PACK_STRUCT   *)bu)->TrType,1024);  
  memcpy(FromBank->TrAmt,((SLZZ_PACK_STRUCT   *)bu)->TrAmt,1024);  
  memcpy(FromBank->Note,((SLZZ_PACK_STRUCT   *)bu)->Note,1024);  
  ...  
  CString   strString;  
  接收的时候怎样把上面的结构组成一个字符串?这样我能用strString.Left、strString.Right、strString.Mid,或者怎样从接收过来的数据取中间的几位?  
   
   
   
  问题点数:20、回复次数:8Top

1 楼bb123456789(bbb)回复于 2003-01-02 08:59:58 得分 0

strString.Format("%s",bu);可以吗?  
  用memcpy()完成取几个字节不是更好吗?  
  Top

2 楼samyoung(sam)回复于 2003-01-02 09:20:46 得分 5

哈哈,用strncpy()和strcpy()函数来取。  
   
  都做成CString也行,  
   
  CString   strTest;  
   
  strTest.Format("%s",FromBank->TrType);Top

3 楼shuichong(睡虫)回复于 2003-01-02 11:32:29 得分 0

char   bu[1024];  
  m_pSocket->Receive(bu,sizeof(bu),0);  
  SLZZ_PACK_STRUCT*   FromBank;  
  strcpy(FromBank->TrType,((SLZZ_PACK_STRUCT   *)bu)->TrType);  
  或  
  memcpy(FromBank->TrType,((SLZZ_PACK_STRUCT   *)bu)->TrType,1024);  
  CString   trType;  
  trType.Format("%s",FromBank->TrType);  
  m_ListMessage.AddString(trType);  
  显示的数据不对啊,  
  定义结构成员char   TrType[3];  
  发送数据为strcpy(toBank->TrType,"01");  
  返回应该也是01,可是取出来的是01+后面好多数据(别的成员数据如TrAmt,TrDate等等),是不是取得有问题?Top

4 楼samyoung(sam)回复于 2003-01-02 12:38:42 得分 5

哦是这样,你根据SLZZ_PACK_STRUCT结构来取嘛,  
   
  这个结构你定义的是定长还是变长?你把结构定义贴出来,我帮你写代码Top

5 楼guanmj(雪在烧)回复于 2003-01-02 13:04:21 得分 5

strcpy(toBank->TrType,"01");  
  要加'\0'  
  变成这样  
  strcpy(toBank->TrType,"01\0");  
  Top

6 楼samyoung(sam)回复于 2003-01-02 13:19:03 得分 5

char   buffer[1024];  
   
  SLZZ_PACK_STRUCT   toBank;  
  ZeroMemory(&toBank,sizeof(SLZZ_PACK_STRUCT));  
   
  CString   strTest;  
  strTest="s0";  
  strncpy(toBank.PackFlag,strTest,strTest.GetLength())  
   
  strTest="zz";  
  strncpy(toBank.DeviceId,strTest,strTest.GetLength())  
   
  strTest="zdsbhzdsbhzdsbhzdsbhzdsbhzdsbh";  
  strncpy(toBank.SourceId,strTest,strTest.GetLength())  
  ...  
   
  memcpy(buffer,&toBank,sizeof(SLZZ_PACK_STRUCT));  
   
  m_pSocket->Send(buffer,sizeof(SLZZ_PACK_STRUCT),0);//  
   
  接收:  
  char   bu[1024];  
  m_pSocket->Receive(bu,sizeof(bu),0);  
   
  char*   pbuf=(char*)bu;  
  SLZZ_PACK_STRUCT   FromBank;  
   
  memcpy(&FromBank,pbuf,sizeof(bu));  
   
   
  CString   strString;  
  strString.Format("%s",FromBank.PackFlag);  
   
   
  Top

7 楼shuichong(睡虫)回复于 2003-01-02 13:41:01 得分 0

回复人:   samyoung(sam)   (   )   信誉:100     2003-01-02   12:38:00     得分:0    
     
     
      哦是这样,你根据SLZZ_PACK_STRUCT结构来取嘛,  
   
  这个结构你定义的是定长还是变长?你把结构定义贴出来,我帮你写代码  
     
  包结构:  
  typedef   struct    
  {  
          char   PackFlag[3];                  
          char   DeviceId[3];                  
          char   SourceId[31];                
          char   BankId[3];                      
          char   BankAccType[2];            
          char   BankAcc[21];                  
          char   BankSecuAccType[2];    
          char   BankSecuAcc[21];          
          char   BankPwdFlag[2];            
          char   BankPwd[17];                  
          char   BankSer[7];                    
          char   SecuId[5];                      
          char   SecuAccType[2];            
          char   SecuAcc[21];                  
          char   SecuPwdFlag[2];            
          char   SecuPwd[17];                  
          char   SecuSer[7];                    
          char   PersonId[21];                
          char   TrType[3];                      
          char   TrAmt[15];                      
          char   TrDate[9];                      
          char   TrTime[7];                      
          char   OperNo[7];                      
          char   RetCode[4];                    
          char   Note[12];                        
          char   Mac[17];                          
          char   Track[161];                    
  }   SLZZ_PACK_STRUCT;//包结构  
  发送结构:  
  char   buffer[2024];  
  SLZZ_PACK_STRUCT   *toBank=(SLZZ_PACK_STRUCT   *)buffer;  
  strcpy(toBank->PackFlag,"S0");  
  strcpy(toBank->DeviceId,"zz");  
  strcpy(toBank->SourceId,"zdsbhzdsbhzdsbhzdsbhzdsbhzdsbh");  
  strcpy(toBank->BankId,"13");  
  strcpy(toBank->BankAccType,"1");  
  strcpy(toBank->BankAcc,"9011522211400477           ");  
  strcpy(toBank->BankSecuAccType,"1");  
  strcpy(toBank->BankSecuAcc,"9011522211400444           ");  
  strcpy(toBank->BankPwdFlag,"2");  
  strcpy(toBank->BankPwd,"8888888888888888");  
  strcpy(toBank->BankSer,"000001");  
  strcpy(toBank->SecuId,"25tl");  
  strcpy(toBank->SecuAccType,"1");  
  strcpy(toBank->SecuAcc,"90115222114004777           ");  
  strcpy(toBank->SecuPwdFlag,"1");  
  strcpy(toBank->SecuPwd,"8888888888888888");  
  strcpy(toBank->SecuSer,"000001");  
  strcpy(toBank->PersonId,"332623800411477           ");  
  strcpy(toBank->TrType,"01");  
  strcpy(toBank->TrAmt,"1234567.89         ");  
  strcpy(toBank->TrDate,"20021227");  
  strcpy(toBank->TrTime,"135032");  
  strcpy(toBank->OperNo,"czyh     ");  
  strcpy(toBank->RetCode,"000");  
  strcpy(toBank->Note,"***********");  
  char   bu[161];  
  memset(   bu,   'd',   161   );  
  bu[161]   =   0;  
  strcpy(toBank->Mac,"8888888888888888");  
  strcpy(toBank->Track,bu);  
  m_pSocket->Send(buffer,sizeof(SLZZ_PACK_STRUCT),0);  
  接收结构:  
  char   bu[1024];  
  m_pSocket->Receive(bu,sizeof(bu),0);  
  SLZZ_PACK_STRUCT*   FromBank;  
  strcpy(FromBank->TrType,((SLZZ_PACK_STRUCT   *)bu)->TrType);  
  CString   trType;  
  trType.Format("%s",FromBank->TrType);  
  switch(trType)  
  {  
        case   "01"  
            break;  
        case   "02"  
            break;  
  }.....  
  我这里取的trType不是01,而是01+TrAmt+TrDate...+RetCode  
  我写的跟上面的好像差不多。  
  能否随便帮我写一个打包和拆包的函数?不用每次赋28个成员的值  
  Top

8 楼samyoung(sam)回复于 2003-01-02 13:49:02 得分 0

代码我已经帮你写了,你照这个样子看看行不行。如果有问题,我们再谈,你可以给我mail:sam_young@hotmail.com  
   
  定长的,不用打包、拆包,填写结构、拷贝结构就行了,哈哈。  
   
  另外,你的基本功还需要努力哦。Top

相关问题

  • 怎样转换CString->char* ?
  • 怎样转换CString 成Double
  • 怎样把int型转换成CString型?
  • 怎样把CString型转换成int型?
  • 怎样把int转换成CString
  • 转换题,怎样由CString 到 LPVOID
  • CString类型怎样转换成unsigned char *
  • ●●int型怎样转换为CString型?●●
  • LPCSTR和CString之间怎样转换?
  • 怎样将货币类型转换成CString类型及怎样反向转换

关键词

  • 结构
  • 数据
  • 代码
  • tobank
  • slzz
  • frombank
  • trtype
  • bu
  • strtest
  • pack

得分解答快速导航

  • 帖主:shuichong
  • samyoung
  • samyoung
  • guanmj
  • samyoung

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

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