Delphi下lstrcpy(FPShareStruct.ParaData[iTaskNo].outData,pchar('1|'+outData+'|')); 转换成lstrcpy(FPShareStruct->ParaData[iTaskNo].outData,LPCTSTR('1|'+outData+'|')); 不等价吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 pchar('1|'+outData+'|')这段不等价如果outData是字符串的话sprintf( FPShareStruct->ParaData[iTaskNo].outData , "1|%s|", outData ); outData里面的数据为3B 6D 00 00 80 31 80 65 B0 84 01 00 C8 83 00 90 0000为null字符 用%s转换 直接就被截取掉了 有其他办法吗 你的outData是BYTE[]?你把他格式化为字符串不就行了 现在传递过去的是1|;m| 显示出来就是3B 6D 是字符呀int __stdcall ICPowerOn(char *CardNo){ LogTxt(0,"*** ICPowerOn() ***"); BYTE Cmd[2]; int Reb; int relen; char ReceData[2000]={0}; char ReceLen[1000]=""; BYTE ReData[1000]={0}; //Cmd[0]=0x40; //Cmd[1]=0x30; //delay(100); //Reb=SendTrackCmd(handle,Cmd,2,ReData,&relen,200,2000,2000); //if(Reb!=0) return -250; Cmd[0]=0x49; Cmd[1]=0x30; Reb=SendTrackCmd(ComHandle,Cmd,2,ReData,&relen,200,2000,2000); char Rece[2550]=""; CharToHex(ReData,relen,ReceData,TRUE); sprintf(ReceLen,"数据长度[%d]",relen); LogTxt(4,ReceLen); memcpy(CardNo,ReData,relen); LogTxt(4,ReceData); if (Reb!=OK)return Reb; return relen; } CardNo就是字符型呀 直接传过去就行 但是现在要加1| | 要这么数据的话,那么delphi的代码也不对啊。 DELPHI下没问题,我改写不加1| |也没问题。加了就要格式化字符串 就被截断了 我直接传递过去的CardNo 打印出来也只有;m 但是如果不添加 直接给上层程序处理就没问题,我自己加1| |转换成字符 就被截取调了 最起码你得给出 outData 的数据类型吧不然大家都是猜. char *CardNo 就是这个呀 通过串口发送数据,然后返回的数据通过CardNo传递 之前是没有问题 现在需要加通讯格式 1| | 加完再以同样的发送出去 总感觉给的信息有点少,要帮你转到delphi区么? 两个函数都给出来了呀 IC卡上电 返回的卡号通过字符传递出去,因为卡号中有特殊字符 所以用%s转不了 谢谢版主了 那就用memcpy拷贝了char out[足够长];memcpy( out , "1|" , 2 );memcpy( out + 2 , CardNo , CardNo的长度 );memcpy( out + 2 + CardNo的长度 , "|" , 1 ); 这个我试了 strcpy也试了 但是只有前面的1|;m 后面就没了 结束的|都没有了 if(FPShareStruct->ParaData[i].FuncNo==FUNC_ICPowerOn) { LogTxt(0,"上电指令"); Status1=ICPowerOn(Temp); FPShareStruct->ParaData[i].iResult=Status1; char l_num[20]; sprintf(l_num,"Status1[%d]",FPShareStruct->ParaData[i].iResult); LogTxt(0,l_num); char Tmp[1025]; /*sprintf(Tmp,"%d",1); memcpy(Tmp+1,"|",1); memcpy(Tmp+2,Temp,Status1); memcpy(Tmp+2+Status1,"|",1); Tmp[2+Status1+1]='\0';*/ sprintf( FPShareStruct->ParaData[i].outData,"1|%s|",Temp); strcpy(Tmp,"1"); strcpy(Tmp+1,"|"); strcpy(Tmp+2,Temp); strcpy(Tmp+2+Status1,"|"); LogTxt(0,Tmp); LogTxt(1,"2222222222222222222222"); //lstrcpy(FPShareStruct->ParaData[i].outData,Tmp); LogTxt(0,FPShareStruct->ParaData[i].outData); FPShareStruct->ParaData[i].procStat=2; }大家还有没有其他的方法 谢谢了 有\0的话就只能用memcpy 要是用strcpy的话\0后面的内容必然丢掉啊。 memcpy 用了和strcpy的结果是一样的数据用十六进制打印出来为3B 6D 00 00 80 31 80 65 B0 84 01 00 C8 83 00 90 00 317C3B6D000080318065B0840100C8830090007C 16进制打印出来倒是有 如何设置 CListCtrl 为 Windows explorer 风格? CFileDialog的问题 求助-通过哪个函数可以设置屏幕亮度 对话框的问题 如何在程序中改变属性页中某个页中的标题? 大家知不知道哪有vc技术内幕的附带源码下载 sql语句太长导致系统出错,怎么办? 是否有办法以旁路的方式阻断UDP? 如何制作一个选择路径的对话框? 使用钩子,怎样在别的程序中绘制图形,比如说直线等? 关于ipcontrol的使用 MFC用GDI+加载png格式图片会比原来的图片大
这段不等价
如果outData是字符串的话
sprintf( FPShareStruct->ParaData[iTaskNo].outData , "1|%s|", outData );
outData里面的数据为3B 6D 00 00 80 31 80 65 B0 84 01 00 C8 83 00 90 0000为null字符 用%s转换 直接就被截取掉了 有其他办法吗
现在传递过去的是1|;m| 显示出来就是3B 6D
是字符呀int __stdcall ICPowerOn(char *CardNo)
{
LogTxt(0,"*** ICPowerOn() ***");
BYTE Cmd[2];
int Reb;
int relen;
char ReceData[2000]={0};
char ReceLen[1000]="";
BYTE ReData[1000]={0};
//Cmd[0]=0x40;
//Cmd[1]=0x30;
//delay(100);
//Reb=SendTrackCmd(handle,Cmd,2,ReData,&relen,200,2000,2000);
//if(Reb!=0) return -250;
Cmd[0]=0x49;
Cmd[1]=0x30;
Reb=SendTrackCmd(ComHandle,Cmd,2,ReData,&relen,200,2000,2000);
char Rece[2550]="";
CharToHex(ReData,relen,ReceData,TRUE);
sprintf(ReceLen,"数据长度[%d]",relen);
LogTxt(4,ReceLen);
memcpy(CardNo,ReData,relen);
LogTxt(4,ReceData);
if (Reb!=OK)return Reb;
return relen;
} CardNo就是字符型呀 直接传过去就行 但是现在要加1| |
我直接传递过去的CardNo 打印出来也只有;m 但是如果不添加 直接给上层程序处理就没问题,我自己加1| |转换成字符 就被截取调了
不然大家都是猜.
char *CardNo 就是这个呀 通过串口发送数据,然后返回的数据通过CardNo传递 之前是没有问题 现在需要加通讯格式 1| | 加完再以同样的发送出去
char out[足够长];
memcpy( out , "1|" , 2 );
memcpy( out + 2 , CardNo , CardNo的长度 );
memcpy( out + 2 + CardNo的长度 , "|" , 1 );
strcpy也试了 但是只有前面的1|;m 后面就没了 结束的|都没有了
{
LogTxt(0,"上电指令");
Status1=ICPowerOn(Temp);
FPShareStruct->ParaData[i].iResult=Status1;
char l_num[20];
sprintf(l_num,"Status1[%d]",FPShareStruct->ParaData[i].iResult);
LogTxt(0,l_num);
char Tmp[1025];
/*sprintf(Tmp,"%d",1);
memcpy(Tmp+1,"|",1);
memcpy(Tmp+2,Temp,Status1);
memcpy(Tmp+2+Status1,"|",1);
Tmp[2+Status1+1]='\0';*/
sprintf( FPShareStruct->ParaData[i].outData,"1|%s|",Temp);
strcpy(Tmp,"1");
strcpy(Tmp+1,"|");
strcpy(Tmp+2,Temp);
strcpy(Tmp+2+Status1,"|");
LogTxt(0,Tmp);
LogTxt(1,"2222222222222222222222");
//lstrcpy(FPShareStruct->ParaData[i].outData,Tmp);
LogTxt(0,FPShareStruct->ParaData[i].outData);
FPShareStruct->ParaData[i].procStat=2;
}
大家还有没有其他的方法 谢谢了