在用VC 6.0做一个信号发生器的项目,读取大播表中的数据到二进制数据块,然后下发给信号发生器,使其按照大波表来输出波形。控制命令为:
:DATA:DAC16 VOLATILE, END,#532768<binary-block-data>
大波表的数据要读到<binary-block-data>中,数据范围0000~3FFF,
命令发下去总是提示命令错误,不知道具体错在哪里,所以想捕获一下发下去的播表数据,看是不是问题出在那。
但是不知道怎么来实现捕获,按照下图的效果来查看:请有经验的高手给与帮助,具体点,求代码,谢谢

解决方案 »

  1.   

    #include <stdio.h>
    #include <string.h>
    void HexDumpToBuf(char *sbuf,char *buf,int len,int addr) {
        int i,j,k,L;
        char binstr[80];    L=0;
        for (i=0;i<len;i++) {
            if (0==(i%16)) {
                sprintf(binstr,"%08x -",i+addr);
                sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            } else if (15==(i%16)) {
                sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
                sprintf(binstr,"%s  ",binstr);
                for (j=i-15;j<=i;j++) {
                    sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
                }
                L+=sprintf(sbuf+L,"%s\n",binstr);
                if (L>=10000) return;
            } else {
                sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            }
        }
        if (0!=(i%16)) {
            k=16-(i%16);
            for (j=0;j<k;j++) {
                sprintf(binstr,"%s   ",binstr);
            }
            sprintf(binstr,"%s  ",binstr);
            k=16-k;
            for (j=i-k;j<i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            L+=sprintf(sbuf+L,"%s\n",binstr);
            if (L>=10000) return;
        }
    }
    int main() {
        char str[1024];
        char buf[10240];
        int flag=1;
        int datalen=3;
        int data[3]={1,2,3};
        int i,L;
        L=sprintf(str,"DATA:VOLETILE%d,%d",flag,datalen);
        for (i=0;i<datalen;i++) memcpy(str+L+i*sizeof(int),&data[i],sizeof(int));
        HexDumpToBuf(buf,str,L+3*sizeof(int),0);
        printf("%s",buf);
        return 0;
    }
    //00000000 - 44 41 54 41 3a 56 4f 4c 45 54 49 4c 45 31 2c 33  DATA:VOLETILE1,3
    //00000010 - 01 00 00 00 02 00 00 00 03 00 00 00              ............
    //
      

  2.   

    就是把数据按BYTE数组一个个打印,打印的时候用十六进制等显示