📄 tool.c
字号:
#include "tool.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void delay(int times)//延时函数
{
int i;
for(;times>0;times--)
for(i=0;i<400;i++);
}
/**********************************************************************
* 函数名称: UART_HextoDec
* 功能描述:
* 将十六进制的字符串转成十进制数整形
* 参数说明:
* hex 十六进制字符串
* 返回值
* 转化后的十进制整形数
******************************************************************/
unsigned long UART_HextoDec(const char *hex)
{
int i, j = 0;
// char ch;
unsigned long val = 0;
unsigned long tempval;
unsigned char length = strlen(hex);
for(i = 0; i < length; i++)
{
if( !( (hex[i] >= '0' && hex[i] <= '9' ) || ((hex[i] >= 'a' && hex[i] <= 'f' )) \
|| (hex[i] >= 'A' && hex[i] <= 'F' ) || (hex[i] == 'x' || hex[i] == 'X')))
return 0;
}
for(i = length - 1; i > 1; i--, j++)
{
if ( (hex[i] >= 'a' && hex[i] <= 'f') \
|| (hex[i] >= 'A' && hex[i] <= 'F') )
{
switch(hex[i])
{
case 'a':
case 'A': tempval = 10; break;
case 'b':
case 'B': tempval = 11; break;
case 'c':
case 'C': tempval = 12; break;
case 'd':
case 'D': tempval = 13; break;
case 'e':
case 'E': tempval = 14; break;
case 'f':
case 'F': tempval = 15; break;
default:break;
}
}
else if (hex[i] >= '0' && hex[i] <= '9')
{
switch(hex[i])
{
case '0': tempval = 0; break;
case '1': tempval = 1; break;
case '2': tempval = 2; break;
case '3': tempval = 3; break;
case '4': tempval = 4; break;
case '5': tempval = 5; break;
case '6': tempval = 6; break;
case '7': tempval = 7; break;
case '8': tempval = 8; break;
case '9': tempval = 9; break;
default:break;
}
}
// tempval = my_atoi(&hex[i]);
val += tempval * pow(16, j);
}
return val;
}
/**********************************************************************
* 函数名称: my_atoi
* 功能描述:
* 字符串转成int型
* 参数说明:
* hex 字符串
* 返回值
* 转化后的十进制整形数
******************************************************************/
unsigned int my_atoi(const char *hex)
{
int i, j = 0;
unsigned int val = 0;
unsigned int tempval;
unsigned char length = strlen(hex);
for(i = 0; i < length; i++)
{
if( !((hex[i] >= '0' && hex[i] <= '9')))
return 0;
}
for(i = length - 1; i >= 0; i--, j++)
{
if (hex[i] >= '0' && hex[i] <= '9')
{
switch(hex[i])
{
case '0': tempval = 0; break;
case '1': tempval = 1; break;
case '2': tempval = 2; break;
case '3': tempval = 3; break;
case '4': tempval = 4; break;
case '5': tempval = 5; break;
case '6': tempval = 6; break;
case '7': tempval = 7; break;
case '8': tempval = 8; break;
case '9': tempval = 9; break;
default:break;
}
}
// tempval = atoi(&hex[i]);
val += tempval * pow(10, j);
}
return val;
}
/**********************************************************************
* 函数名称: UART_DectoHex
* 功能描述:
* 将(0-255)十进制的整形转成十六进制字符串
* 参数说明:
* decimal 待转化的十进制数
* hex 存放十六进制字符串
* 返回值
* 1 成功 0 失败
******************************************************************/
int UART_DectoHex(unsigned char decimal, char *hex)
{
int ret = 0;
ret = sprintf(hex, "0x%02x", decimal);
if(ret == 4)
{
return 1;
}
else
{
return 0;
}
}
/**********************************************************************
* 函数名称: UART_DecaddrtoHexaddr
* 功能描述:
* 将十进制整形地址转成十六进制地址字符串
* 参数说明:
* decimaladdr 待转化的十进制整形地址
* hexaddr 存放十六进制地址字符串
* 返回值
* 1 成功 0 失败
******************************************************************/
int UART_DecaddrtoHexaddr(unsigned int decimaladdr, char *hexaddr)
{
int ret = 0;
ret = sprintf(hexaddr, "0x%08x", decimaladdr);
if(ret == 10)
{
return 1;
}
else
{
return 0;
}
}
/*****************************************************
函数名称: int VALIDATION_isLeapYear(int year)
功 能: 判断是否闰年
参 数: year 年
返 回 值: 1-通过 0-不通过
*****************************************************/
int VALIDATION_isLeapYear(int year)
{
return (year%4 == 0 && year%100 != 0 || year%400 == 0);
}
/*****************************************************
函数名称:int VALIDATION_isDate(char *pDate,TIME_T * pSysDate)
功 能:日期格式校验
参 数:pDate 日期
返 回 值:1-有效 0-不合法
创建时间: 2012-09-24
*****************************************************/
int VALIDATION_isDate(char *pDate)
{
char cYear[10] = {0};
char cMonth[10] = {0};
char cDay[10] = {0};
int i = 0,nYear,nMonth,nDay;
if(pDate[10] != '\0')
return 0;
for(i = 0; i < 10; i++) //判断数据是否合法
{
if(i == 4 || i == 7)
{
if(pDate[i] != '-')
return 0;
}else if(pDate[i] >= '0' && pDate[i] <= '9')
{
if(i < 4)
cYear[i] = pDate[i];
else if(i>4 && i<7)
cMonth[i-5] = pDate[i];
else
cDay[i-8] = pDate[i];
}else
return 0;
}
i = 0;
nYear = my_atoi(cYear);
nMonth = my_atoi(cMonth);
nDay = my_atoi(cDay);
switch(nMonth)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(nDay > 31 || nDay < 0)
return 0;
break;
case 4:
case 6:
case 9:
case 11:
if(nDay > 30 || nDay < 0)
return 0;
break;
case 2:
{
if(VALIDATION_isLeapYear(nYear)) //判断闰年2月份的天数是否合法
{
if(nDay > 29 || nDay < 0)
return 0;
}else //判断非闰年2月份的天数是否合法
if(nDay > 28 || nDay < 0)
return 0;
}
break;
default:
return 0;
}
return 1;
}
/*****************************************************************
函数名称:int VALIDATION_isTime(char *pTime,TIME_T * pSysTime)
功 能:时间格式校验
参 数:pTime 时间
返 回 值:1-有效 0-不合法
创建时间: 2012-09-24
*****************************************************************/
int VALIDATION_isTime(char *pTime)
{
char cHour[3] = {0};
char cMin[3] = {0};
char cSec[3] = {0};
int i = 0,nHour,nMin,nSec;
if(pTime[8] != '\0')
return 0;
for(i = 0; i < 8; i++) //判断数据是否合法
{
if(i == 2 || i == 5)
{
if(pTime[i] != ':')
return 0;
}else if(pTime[i] >= '0' && pTime[i] <= '9')
{
if(i < 2)
cHour[i] = pTime[i];
else if(i>2 && i<5)
cMin[i-3] = pTime[i];
else
cSec[i-6] = pTime[i];
}else
return 0;
}
i = 0;
nHour = my_atoi(cHour);
nMin = my_atoi(cMin);
nSec = my_atoi(cSec);
if(nHour>23 || nHour<0 || nMin>59 || nMin<0 || nSec>59 || nSec<0)
return 0;
else
{
return 1;
}
}
/*****************************************************************
函数名称:int select_num(char *temp)
功 能:数字校验
参 数:temp
返 回 值:1-有效 0-不合法
创建时间: 2012-09-24
*****************************************************************/
int select_num(char *temp)
{
int n;
for(n = 0;n < strlen(temp);n++)
{
if(!((temp[n] >= 48 && temp[n] <= 57) ))
return 0;
}
return 1;
}
/*****************************************************************
函数名称:int select_0x(char *temp)
功 能:数字校验
参 数:temp
返 回 值:1-有效 0-不合法
创建时间: 2012-09-24
*****************************************************************/
int select_0x(char *temp)
{
int n;
for(n = 0;n < strlen(temp);n++)
{
if(!((temp[n] >= 48 && temp[n] <= 57) || (temp[n] >= 65 && temp[n] <= 70) || (temp[n] >= 97 && temp[n] <= 102 ) || temp[n] == 120 || temp[n] == 88))
return 0;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -