将十六进制转成十进制字符串显示

1.将十六进制字符(unsigned char 一个字节),通过CString类的Format函数,将char转成十六进制字符串

2.再将十六进制字符串通过 “ ChangeNum ” 函数转成十进制数;

 

3.最后通过gcvt函数再将十进制数转成字符串

//ADC Value Display
	CString ADCVal,Temp;	//接收数据转换成十六进制buffer
	char  DAdcVal[20];		//浮点转字符串buffer
	double v1=0;
	int v=0;

	//********************************
	//将十六进制字符转成十六进制字符串	
	//********************************
	ADCVal="";				//变量清零
	Temp="";
	memset(DAdcVal,0,sizeof(DAdcVal));

	Temp.Format("%2X",rxdata[5]);		//data2为高字节, Format函数中的"%2X"代表转成字符型数据
						//rxdata[i]是主程序中定义的unsigned char型数据
	ADCVal=Temp;
	Temp.Format("%2X",rxdata[4]);		//data1为低字节
	ADCVal+=Temp;
	ADCVal.Replace(" ",NULL);			//去掉数据中间的空格

	//*********************************
	//将十六进制字符串转成十进制数
	//*********************************
	v=ChangeNum(ADCVal,ADCVal.GetLength());		//将十六进制字符转成十进制数字
	v1=v*(3.3/4096);		//按协议计算ADC的数值
	
	//*********************************
	//将十进制数转成字符串
	//*********************************
	gcvt(v1,5,DAdcVal);		//将十进制浮点数转换成字符串

	if (rxdata[2]==0x04)	//如是04 command显示ADC值
	{
		m_Register_frm.m_TemData = DAdcVal;
		m_Register_frm.SetDlgItemText(IDC_EDIT_TemData,m_Register_frm.m_TemData);
	}


ChangeNum函数的实现:

//---------------------------------------------------------------------
//十六进制字符串转十进制数函数
//---------------------------------------------------------------------

int ChangeNum (CString str, int length)
{
	char  revstr[16]={0};  //根据十六进制字符串的长度,这里注意数组不要越界
	int   num[16]={0};  
	int   count=1;  
	int   result=0;  
	strcpy(revstr,str);  
	for   (int i=length-1;i>=0;i--)  
	{  
		if ((revstr[i]>='0') && (revstr[i]<='9'))  
			num[i]=revstr[i]-48;//字符0的ASCII值为48
		else if ((revstr[i]>='a') && (revstr[i]<='f'))  
			num[i]=revstr[i]-'a'+10;  
		else if ((revstr[i]>='A') && (revstr[i]<='F'))  
			num[i]=revstr[i]-'A'+10;  
		else  
			num[i]=0;
		result=result+num[i]*count;  
		count=count*16;//十六进制(如果是八进制就在这里乘以8)   
	}  
	return result;

}


gcvt函数的使用,参考blog:

http://blog.csdn.net/phenixyf/article/details/11852417

 

本例在程序中位置

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值