前面提了这么一个问题
  往串口中写入两个字节。要求,第一字节的第0,3,4,5位为1,其它位为0,第二字节的第0,6,7位为1,其它位为0; 
假如串口写入函数为: 
  ComWrite(char *buf); 很多朋友给了一些回复,可没能找到理想一点的答案,大家多数朋友是把值转换成十六进制,然后传给ComWrite函数。
问题是,我要传送的这个字节是在变的,各字节的各位0-1值是在变化的,比如,第一次调用ComWrite时其参数buf第一个字节1,3,5位为1,第二个字节2,4,6位为1其它位为0,而第二次调用ComWrite时,其参数buf第一个字节1,3,5位为0,第二个字节2,4,6位为0其它位为1,如果我用例如下面这位朋友的方法:char buf[2]; 
buf[0] = 0x39; 
buf[1] = 0xC1; 
ComWrite(buf); 这样传进去的话,我如何动态去把一个二进制转换成16进制再传给ComWrite呢?有没有一个好一点的方法,不管buf两个字节的各位值如何变化,都能很好的转化为参数传给ComWrite函数呢?

解决方案 »

  1.   

    真要按位逐个赋值的话可以用结构 
    struct BIT 

    b1:1; 
    b2:1; 
    b3:1; 
    b4:1; 
    b5:1; 
    b6:1; 
    b7:1; 
    b8:1; 

    union{ 
    char cbuf; 
    BIT bits; 

    然后cbuf=0;bits.b1=1;bits.b3=1;bits.b4=1;bits.b5=1;
    buf[0]=cbuf;
    bits.b1=..........
    buf[1]=cbuf;
    ComWrite(buf); 
      

  2.   

    这个不难。自己变的话,弄个函数int Fuc(int bit1,int bit2,int bit3,int bit4)
    {
      4位组装成一个数后赋给一个char
    }数据过来,收集4位后从函数里面走一下,流出来的就是一个char数组了
      

  3.   

    int Func(int bit1,int bit2,int bit3,int bit4) 

      return bit1*8+bit2*4+bit3*2+bit4*1;
    }char x[0]=Func(0,1,0,1);
    char x[1]=Func(1,1,0,0);
     
      

  4.   

    这个不对吧?一个字节好像是8位 你这样下来不是4位了?
    函数是不是要改为:
    int Func(int bit1,int bit2,int bit3,int bit4,int bit5,int bit6,int bit7,int bit8) 

      return bit1*128+bit2*64+bit3*32+bit4*16+bit5*8+bit6*4+bit7*2+bit8*1;
    }