简单实现STM32十进制-十六进制转换,无需复杂函数和for循环

STM32【十进制-十六进制转换】无需for循环等复杂函数

  • 任务
  • 代码
  • 输出解释
  • 之前做项目用到这个功能,也把网上的许多例程都跑了一遍,看到一些复杂的函数也是很头疼,一些方法都是需要用sprintf来操作,但在这里并不适用,最后小鱼君询问chatgpt直接解决问题。

    任务

    由于用到了DWIN串口屏,所以需要将一个三位数的十进制变量转化为十六进制去输出。举个例子,如果我要在屏幕上显示46.1,那么我需要发送的数据就是(HEX)461,这个很容易就能解决,但是问题总是多变的,首先用过强制转换,未果,其次用过定义外置函数,未果。最后求助chatgpt多次后得出了结果。
    废话不说直接看代码:

    代码

    #include <stdio.h>
    
    int main() {
        int decimal = 461; // 要转换的十进制数值
        unsigned char hex[3]; // 存放转换结果的十六进制数值数组
    
        // 将十进制数值转换成十六进制数值
        hex[0] = decimal % 16; // 个位数
        decimal /= 16;
        hex[1] = decimal % 16; // 十位数
        decimal /= 16;
        hex[2] = decimal % 16; // 百位数
    
        // 输出转换结果
        printf("%X,0x%02X\n", hex[2], hex[1]*16+hex[0]);
    
        return 0;
    }
    
    

    输出解释

    这里唯一需要解释的就是最后的输出,还是用一个例子说明:

    在这里我们可以看到461转换十六进制后是1CD,那么我来考考大家,这里串口发送出去时候是0X01 0XCD呢?还是0X1C 0X0D呢?起初小鱼君也没有搞明白,但是经过多次调试后可以清楚的看到结果是0X01,0XCD屏幕才会显示。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 简单实现STM32十进制-十六进制转换,无需复杂函数和for循环

    发表评论