前面提了这么一个问题
往串口中写入两个字节。要求,第一字节的第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函数呢?
往串口中写入两个字节。要求,第一字节的第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函数呢?
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);
{
4位组装成一个数后赋给一个char
}数据过来,收集4位后从函数里面走一下,流出来的就是一个char数组了
{
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);
函数是不是要改为:
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;
}