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];
  char Temp20[1000];
  memcpy(Temp20,Temp,Status1);
  sprintf(Tmp,"%d%c%s%c",1,'|',Temp20,'|');
  lstrcpy(FPShareStruct->ParaData[i].outData,Tmp);
  LogTxt(0,FPShareStruct->ParaData[i].outData);
  memcpy(FPShareStruct->ParaData[i].outData,Temp,Status1);
  FPShareStruct->ParaData[i].procStat=2;Temp 中的数据为3B 6D 00 00 80 31 80 65 B0 84 01 00 C8 83 00 90 00
通过%s转换  只能把3B  6D传过去

解决方案 »

  1.   

    sprintf(Tmp,"%d%c%s%c",1,'|',Temp20,'|');
    用memcpy这类的函数处理。
      

  2.   

    memcpy怎么在数据前和后加1| |
      

  3.   

    //sprintf(Tmp,"%d%c%s%c",1,'|',Temp20,'|'); //用下面代码代替这句
    sprintf(Tmp,"%d",1);
    memcpy(Tmp+1,"|",1);
    memcpy(Tmp+2,Temp,Status1);
    memcpy(Tmp+2+Status1,"|",1);
      

  4.   

    从你代码中看不确实 Status1 是不是是Temp的长度 。
    Status是如何获取的,看看这个值是不是正确也要调试一下看看
      

  5.   


    2013-01-09 16:04:44. 31[BN0]Status1[17]
    2013-01-09 16:04:44. 31[BN0]1|;m
    2013-01-09 16:04:44. 31[BN1]2222222222222222222222打印出来  后面的|没添加成功   Status1 是需要返回的数据长度
      

  6.   

    后面的不对,那就和Status1这个参数的值有关。可以自己调试下看看。
    我主要是担心你的Status1通过strlen这类的函数获取的,可能有问题。如果不是,你可以自己调试一下。
      

  7.   

    后面加上这句 Tmp[2+Status1+1]='\0';
      

  8.   


    先谢谢你了,我这个是给别人调用的程序调用的exe  我设置断点没有用  只能通过日志来看
     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';
      LogTxt(0,Tmp);
      LogTxt(1,"2222222222222222222222");
      lstrcpy(FPShareStruct->ParaData[i].outData,Tmp);
      LogTxt(0,FPShareStruct->ParaData[i].outData);
      FPShareStruct->ParaData[i].procStat=2;
     }
    代码是这样的  打印出来的日志
    2013-01-09 16:04:45.765[BN0]Status1[17]
    2013-01-09 16:04:45.765[BN0]1|;m
    2013-01-09 16:04:45.765[BN1]2222222222222222222222
      

  9.   

    是不是因为其中有数据为00 对应的是null字符  所以终止了
      

  10.   

    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]=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;
    }
    这样之前给调用的时候是成功的  但是现在需要转成1|CardNo|这样发
      

  11.   


    lstrcpy(FPShareStruct.ParaData[iTaskNo].outData,pchar('1|'+outData+'|')); delphi下这样就行。