📄 tool.c
字号:
/************************************************************
Copyright (C), 2005, comba. Co., Ltd.
FileName: tool.c
Author: laifuqi
Version : 1.0
Date: 2005.6.14
Description: 字符串 API函数
Function List:
1. AsciiToHex
2. HexToAscii
3. DecToAscii
4. FloatToAscii
5. HexToDec
6. DecToHex
7. LowToUpperCase
8. UpperToLowCase
10.IsUpperCase
11.IsLowCase
12.IsDigit
13.FloatToDecAscii
History:
<author> <time> <version > <desc>
laifuqi 2005.6.14 1.0 create
***********************************************************/
#include "tool.h"
/*************************************************
Function: AsciiToHex
Description: ascii to hexa conversion
Calls:
Called By:
Input: none
Output: none
Return: none
Others: none
*************************************************/
INT32U AsciiToHex(char *s, INT32U *val)
{
INT32S n;
*val=0;
if(s[0] == '0' && ((s[1] == 'x') || (s[1] == 'X')))
s+=2;
n = 0;
while((n < 8) && (s[n] !=0))
{
*val <<= 4;
if ( (s[n] >= '0') && (s[n] <='9'))
{
*val += (s[n] - '0');
}
else
{
if ((s[n] >= 'a') && (s[n] <='f'))
{
*val += (s[n] - 0x57);
}
else if ((s[n] >= 'A') && (s[n] <='F'))
{
*val += (s[n] - 0x37);
}
else
return 0;
}
n++;
}
return 1;
}
/*************************************************
Function: HexToAscii
Description: hex转换为ASCII
Calls:
Called By:
Input: none
Output: none
Return: none
Others: none
*************************************************/
void HexToAscii(INT32U val,char *pBuff)
{
INT32S i;
*pBuff++ = '0';
*pBuff++ = 'x';
for(i=8;i>0;i--)
{
if(((val>>28)&0x0f)<=9 )
{
*pBuff++ = ((val>>28)&0x0f)+ 0x30;
}
else
{
*pBuff++ = ((val>>28)&0x0f)+ 0x57;
}
val <<= 4;
}
*pBuff = 0;
}
/*************************************************
Function: DecToAscii
Description: 十进制转换为ASCII
Calls:
Called By:
Input: none
Output: none
Return: none
Others: none
*************************************************/
void DecToAscii(INT32U val,char *pBuff)
{
int i;
int flag;
flag = 0;
for(i=8;i>0;i--)
{
if(((val>>28)&0x0f)>0 ) /* 数据为1~9 */
{
*pBuff++ = ((val>>28)&0x0f)+ 0x30;
flag = 1; /* 有效数据后的0有效 */
}
else
{
if(0!=flag) /* 有效0需转换 */
{
*pBuff++ = ((val>>28)&0x0f)+ 0x30;
}
}
val <<= 4;
}
if(flag==0)
*pBuff++ = '0';
*pBuff = 0;
}
/*************************************************
Function: FloatToAscii
Description:
Calls:
Called By:
Input: none
Output: none
Return: none
Others: none
*************************************************/
void FloatToAscii(INT32U val,char *pBuff)
{
INT32S i;
INT16U temp;
temp = (INT16U) val;
for(i=4;i>0;i--)
{
*pBuff++ = ((temp>>12)&0x0f)+ 0x30;
temp <<= 4;
}
*pBuff = 0;
}
/*************************************************
Function: HexToDec
Description: HEX转换为十进制
Calls:
Called By:
Input: none
Output: none
Return: none
Others: none
*************************************************/
#define DEC_MAX_VAL 0x05F5E0FF /* 最大转换数值:十进制 99999999 */
INT32U HexToDec(INT32U val)
{
INT32U tmp;
INT32S i;
INT32U rc;
INT32U decVal;
if(val>DEC_MAX_VAL)
{
#ifdef UART1_EN
UART1Printf("\n\rError: the maximum dec val: 999999!\n\r");
#endif
while(1); /* error !!!! */
}
tmp = 10000000;
rc = 0;
for(i=0;i<8;i++)
{
decVal = val/tmp;
rc <<= 4;
rc |= decVal&0x0f;
if((decVal&0x0f)>0)
{
val = val -(decVal&0x0f)*tmp;
}
tmp = tmp/10;
}
return rc;
}
/*************************************************
Function: DecToHex
Description:
Calls:
Called By:
Input: none
Output: none
Return: none
Others: none
*************************************************/
INT32U DecToHex(INT32U val)
{
INT32U tmp;
tmp = (val&0x000f)+((val>>4)&0x000f)*10+((val>>8)&0x000f)*100+((val>>12)&0x000f)*1000;
return tmp;
}
/*************************************************
Function: LowToUpperCase
Description:
Calls:
Called By:
Input: none
Output: none
Return: none
Others: none
*************************************************/
char LowToUpperCase( char ch)
{
return (ch-'a'+'A');
}
/*************************************************
Function: UpperToLowCase
Description:
Calls:
Called By:
Input: none
Output: none
Return: none
Others: none
*************************************************/
char UpperToLowCase( char ch)
{
return (ch+'a'-'A');
}
/*************************************************
Function: IsUpperCase
Description:
Calls:
Called By:
Input: none
Output: none
Return: none
Others: none
*************************************************/
unsigned int IsUpperCase(char ch)
{
if((ch>='A')&&(ch<='F'))
{
return 1;
}
else
{
return 0;
}
}
/*************************************************
Function: IsLowCase
Description:
Calls:
Called By:
Input: none
Output: none
Return: none
Others: none
*************************************************/
unsigned int IsLowCase(char ch)
{
if((ch>='a')&&(ch<='f'))
{
return 1;
}
else
{
return 0;
}
}
/*************************************************
Function: IsDigit
Description:
Calls:
Called By:
Input: none
Output: none
Return: none
Others: none
*************************************************/
unsigned int IsDigit(char ch)
{
if((ch>='0')&&(ch<='9'))
{
return 1;
}
else
{
return 0;
}
}
/*************************************************
Function: FloatToDecAscii
Description:
Calls:
Called By:
Input: none
Output: none
Return: none
Others: none
*************************************************/
void FloatToDecAscii(float ch,char *DecBuff)
{
INT32U tmp;
INT32U rc;
INT32U decVal;
char tempBuff[6];
tmp = (INT32U) ch; /* 得到浮点数的整数部分 */
decVal = HexToDec(tmp);
tmp = (INT32U)((ch-(float)tmp)*10000);/* 得到浮点的小数部分 */
rc = HexToDec(tmp);
DecToAscii(decVal,DecBuff);
strcat(DecBuff,".");
FloatToAscii(rc,tempBuff);
strcat(DecBuff,tempBuff);
}
/* end of file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -