将串口接收到的十六进制数据转为十进制
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)即可。