/*
最近在搞一个语音识别模块SU-03T,想要实现通过串口传输气压数据给模块,
让它对气压的数据进行播报。结果发现传输的数据必须是16进制的值,
因此记录一下如何将10进制的气压数据转换为16进制。
*/
#include "stdio.h"
//将10进制转换为16进制的HEX
//参数:decimal(传入的10进制数)
//返回:16进制hex
long decimalToHex_big(long decimal)
{
long hex = 0;
int i = 0;
char temp_buff[20];
sprintf(temp_buff, "%lX", decimal);//换为字符串的16进制
//根据字符串长度一直转换
for( i =0 ; temp_buff[i] != '\0'; i++ )
{
//如果是数字
if( temp_buff[i] >= '0' && temp_buff[i] <= '9' )
{
hex = (hex << 4) | temp_buff[i]-'0';
}
else//如果是字母
{
switch( temp_buff[i] )
{ //先左移再转换
case 'A': hex = (hex << 4) | 0x0A; break;
case 'B': hex = (hex << 4) | 0x0B; break;
case 'C': hex = (hex << 4) | 0x0C; break;
case 'D': hex = (hex << 4) | 0x0D; break;
case 'E': hex = (hex << 4) | 0x0E; break;
case 'F': hex = (hex << 4) | 0x0F; break;
}
}
}
return hex;
}
int main(void)
{
unsigned long a = 101256;
printf("输入的10进制:%ld\r\n", a);
printf("输出的16进制:%lX\r\n", decimalToHex_big(a) );
}
输出结果: