转换成
lstrcpy(FPShareStruct->ParaData[iTaskNo].outData,LPCTSTR('1|'+outData+'|'));  不等价吗?

解决方案 »

  1.   

    pchar('1|'+outData+'|')
    这段不等价
    如果outData是字符串的话
    sprintf( FPShareStruct->ParaData[iTaskNo].outData , "1|%s|", outData );
      

  2.   


    outData里面的数据为3B 6D 00 00 80 31 80 65 B0 84 01 00 C8 83 00 90 0000为null字符 用%s转换 直接就被截取掉了  有其他办法吗
      

  3.   

    你的outData是BYTE[]?你把他格式化为字符串不就行了
      

  4.   


    现在传递过去的是1|;m|  显示出来就是3B  6D
      

  5.   


    是字符呀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|  |
      

  6.   

    要这么数据的话,那么delphi的代码也不对啊。
      

  7.   

      DELPHI下没问题,我改写不加1| |也没问题。加了就要格式化字符串 就被截断了
      

  8.   


    我直接传递过去的CardNo 打印出来也只有;m 但是如果不添加 直接给上层程序处理就没问题,我自己加1| |转换成字符 就被截取调了
      

  9.   

    最起码你得给出  outData 的数据类型吧
    不然大家都是猜.
      

  10.   


    char *CardNo   就是这个呀   通过串口发送数据,然后返回的数据通过CardNo传递  之前是没有问题 现在需要加通讯格式 1| |  加完再以同样的发送出去
      

  11.   

    总感觉给的信息有点少,要帮你转到delphi区么?
      

  12.   

      两个函数都给出来了呀  IC卡上电 返回的卡号通过字符传递出去,因为卡号中有特殊字符 所以用%s转不了  谢谢版主了
      

  13.   

    那就用memcpy拷贝了
    char out[足够长];
    memcpy( out , "1|" , 2 );
    memcpy( out + 2 , CardNo  , CardNo的长度 );
    memcpy( out + 2 + CardNo的长度  , "|"  , 1 );
      

  14.   

      这个我试了 
    strcpy也试了  但是只有前面的1|;m      后面就没了   结束的|都没有了
      

  15.   

    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;
     }
    大家还有没有其他的方法  谢谢了
      

  16.   

    有\0的话就只能用memcpy 要是用strcpy的话\0后面的内容必然丢掉啊。
      

  17.   

    memcpy 用了和strcpy的结果是一样的数据用十六进制打印出来为3B 6D 00 00 80 31 80 65 B0 84 01 00 C8 83 00 90 00 
      

  18.   

    317C3B6D000080318065B0840100C8830090007C  16进制打印出来倒是有