1.十六进制转十进制代码
代码如下:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
// 十六进制转十进制的函数
int hex_to_decimal(const char *hex_str)
{
int decimal_num = 0;
int len = strlen(hex_str);
for (int i = 0; i < len; i++) {
char ch = hex_str[i];
if (isdigit(ch)) {
// 如果是数字字符,减去字符 '0' 得到对应的数值
decimal_num = decimal_num * 16 + (ch - '0');
} else if (ch >= 'A' && ch <= 'F') {
// 如果是大写字母 A - F,减去字符 'A' 并加上 10 得到对应的数值
decimal_num = decimal_num * 16 + (ch - 'A' + 10);
} else if (ch >= 'a' && ch <= 'f') {
// 如果是小写字母 a - f,减去字符 'a' 并加上 10 得到对应的数值
decimal_num = decimal_num * 16 + (ch - 'a' + 10);
}
}
return decimal_num;
}
实现效果:
2.对串口接收数据进行处理
如过将上面代码直接移植到我们的工程文件中,对串口接收到的十六进制数直接进行处理,是不会成功的。因为上面十六进制转十进制函数传入的参数是字符串,而我们串口接收到的是十六进制数。所以还需有一个将十六进制数转为字符串的函数,这样才能实现将串口十六进制数转为十进制数。
十六进制转为字符串函数调用C语言中的sprintf函数便可实现。
int HextoDec(unsigned char hex_num)
{
char hex_str[3]; //存储转换后的字符串
int dec; //dec存储转换后的十进制
sprintf(hex_str, "%02X", hex_num); //将十六进制数hex_num转为字符串,存储在hex_str中
dec = hex_to_decimal(hex_str);
}
要将串口十六进制转为十进制,只需要直接调用int HextoDec(unsigned char hex_num)即可。