二进制转换成十六进制输出的C代码

(本博客只提供很厉害的方法,没有代码)
项目需求是需要把一个字节(8bit)的二进制数转换成一个十六进制的数值,然后发送给上位机;
我自己试着编写代码,思路是把这个8bit的二进制数存放到一个数组里面,分高4bit和低4bit,分别转换成十进制,然后用switch判断这个十进制,转换成对应十六进制数,例如十进制1对应十六进制1,十进制10对应十六进制A;
问题来了,这样就把一个十六进制拆分成2个数,例如0x1A,我只求出1和A,但是不知道怎样用代码翻译成0x1A。(补充自:2018/11/30 例如test[0] = 0x01;test[1] = 0x0A; 合成是temp = test[0]<<4 | test[1] ; //0x1A 核心是移位操作)
想了其他一些方法,百度了许多资料,都没有找到二进制转换成十六进制输出的C代码。有些代码虽然可以转换了,还是输出的十六进制也是拆分成字符串形式输出的,不是一个完整的十六进制。

问了同事,原来有更加简单的方法实现项目需求;

从项目背景说起,是一对光幕测身高的设备,光幕接收端通过8个 TSOP6238 接收红外光,当某个节点没有接收到红外光,就把这个节点置1,否则置0;

所以我才想要把8个bit的二进制数转换成十六进制。

其实不用这样复杂,方法是最基本的C语言位操作
划重点:::
先初始化一个变量为0x00(例如RS485_2_TXbuf[3] = 0x00;),设置一个8次轮询,每个轮询中,当接触不到红外光,表示这个节点被挡住,置1,用或操作(|);
例如RS485_2_TXbuf[3] |= 0x01<<1;RS485_2_TXbuf[3] |= 0x01<<5;
最后得到的这个变量,就是最终的形态,也是一个十六进制数。

发布了97 篇原创文章 · 获赞 135 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/weixin_37787043/article/details/82792139