怎样转换到CString?
发送结构:
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




