之前做项目用到这个功能,也把网上的许多例程都跑了一遍,看到一些复杂的函数也是很头疼,一些方法都是需要用sprintf来操作,但在这里并不适用,最后小鱼君询问chatgpt直接解决问题。
任务
由于用到了DWIN串口屏,所以需要将一个三位数的十进制变量转化为十六进制去输出。举个例子,如果我要在屏幕上显示46.1,那么我需要发送的数据就是(HEX)461,这个很容易就能解决,但是问题总是多变的,首先用过强制转换,未果,其次用过定义外置函数,未果。最后求助chatgpt多次后得出了结果。
废话不说直接看代码:文章来源:https://www.toymoban.com/news/detail-619909.html
代码
#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屏幕才会显示。文章来源地址https://www.toymoban.com/news/detail-619909.html
到了这里,关于STM32【十进制-十六进制转换】无需for循环等复杂函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!