#include
#include
#include
/*
* tool_utils.c
*
* Created on: 2016-2-2
* Author: user
*/
/*******************************************************************************
* 函数名 : strnicmp
* 描述 : 字符比较
* 输入 :
* 输出 :
* 返回 :
* 注意 :
*******************************************************************************/
int strnicmp(const char *dst, const char *src, int count)
{
char ch1, ch2;
if(count != strlen(src))
return -1;
do
{
if ( ((ch1 = (unsigned char)(*(dst++))) >= 'A') &&(ch1 <= 'Z') )
ch1 += 0x20;
if ( ((ch2 = (unsigned char)(*(src++))) >= 'A') &&(ch2 <= 'Z') )
ch2 += 0x20;
} while ( --count && ch1 && (ch1 == ch2) );
return (ch1 - ch2);
}
/*******************************************************************************
* 函数名 : itoi
* 描述 : 数字转化为字符串
* 输入 :
* 输出 :
* 返回 :
* 注意 :
*******************************************************************************/
void itoi(char *str, unsigned long num)
{
char index[]="0123456789";
char i = 0, j = 0;
char temp;
do
{
str[i++] = index[num%10];
num /= 10;
}while(num);
str[i]='\0';
for(j=0; j<=(i-1)/2; j++)
{
temp=str[j];
str[j]=str[i-j-1];
str[i-j-1]=temp;
}
}
/*******************************************************************************
* 函数名 : itoc
* 描述 : 单个数字转化为字符
* 输入 : ichar数字
* 输出 :
* 返回 : 字符
* 注意 :
*******************************************************************************/
char itoc(unsigned char ichar)
{
char index[]="0123456789";
return index[ichar%10];
}
/*******************************************************************************
* 函数名 : Hex2Str
* 描述 : 16进制数转化成字符串,用于AT+NSOST命令
* 输入 : 输入: pSrc - 源数据指针
* 输出 : 输出: pDst - 目标字符串指针
* 返回 :
* 注意 : 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01"
*******************************************************************************/
void Hex2Str(char* pSrc, char* pDst, unsigned int nSrcLength)
{
int i = 0;
const char tab[]="0123456789ABCDEF"; // 0x0-0xf的字符查找表
for (i = 0; i < nSrcLength; i++)
{
*pDst++ = tab[*pSrc >> 4]; // 输出高4位
*pDst++ = tab[*pSrc & 0x0f]; // 输出低4位
pSrc++;
}
// 输出字符串加个结束符
*pDst = '\0';
}
/*******************************************************************************
* 函数名 : AsciiToHex
* 描述 : ASCALL码转换成字符
* 输入 : unsigned char cNum ASC-II字符码
* 输出 : unsigned char HEX码
* 返回 :
* 注意 : 如:{'A'} --> 0xA
*******************************************************************************/
unsigned char AsciiToHex(unsigned char cNum)
{
if(cNum>='0'&&cNum<='9')
{
cNum -= '0';
}
else if(cNum>='A'&&cNum<='F')
{
cNum -= 'A';
cNum += 10;
}
else if(cNum>='a'&&cNum<='f')
{
cNum -= 'a';
cNum += 10;
}
return cNum;
}
/*******************************************************************************
* 函数名 : StrToHex
* 描述 : 字符串转换hex
* 输入 : char *ptr字符存储区,unsigned short len数据长度
* 输出 :
* 返回 :
* 注意 : 如:"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}
*******************************************************************************/
void StrToHex(char *ptr, unsigned short len)
{
unsigned char n1 = 0;
unsigned char n2 = 0;
unsigned char num = 0;
unsigned short i = 0;
unsigned short index = 0;
for(i=0; i { index = i << 1; //index=i*2 n1 = AsciiToHex(ptr[index]); n2 = AsciiToHex(ptr[index+1]); num = (n1<<4) + n2; str[i] = num; } } /*************************************************** * author:szy * data:2018-7-26 * 功能:两位数十进制转 BCD 码 * 输入: int Dec 待转换的十进制数据 * 返回: unsigned char Bcd 转换后的 BCD 码 *****************************************************/ unsigned char DectoBCD(int Dec) { int i; int temp; unsigned char Bcd; temp = Dec%100; Bcd = ((temp/10)<<4) + ((temp%10) & 0x0F); return Bcd; } ******************************************************************* //BCD码转十进制函数,输入BCD,返回十进制 #include #include #define uchar unsigned char uchar BCD_Decimal(uchar bcd) ; int main(void) { uchar ch = 0x20 ; uchar ah = 0x10; int a; uchar dec = BCD_Decimal(ch); uchar aec = BCD_Decimal(ah); printf("dec = %d\n",dec); //20 printf("aec = %d\n",aec);//10 a = dec-aec; printf("a=%d\n",a);//10 return 0 ; } uchar BCD_Decimal(uchar bcd) { uchar Decimal; Decimal=bcd>>4; return(Decimal=Decimal*10+(bcd&=0x0F)); } //int——>hex char int2hex(int num) { char str = 0X00; int i; for(i=0;i { str++; } //printf("str = %x\n",str); return str; } unsigned short int2hex_short(int num) { unsigned short str = 0x0000; int i; for(i=0;i { str++; } printf("str = %x\n",str); return str; } /******************************************************************************* * author:szy * data:2018-7-25 * 函数名 : AsciiToHex * 描述 : ASCALL码转换成字符 * 输入 : unsigned char cNum ASC-II字符码 * 输出 : unsigned char HEX码 * 返回 : * 注意 : 如:{'A'} --> 0xA *******************************************************************************/ unsigned char AsciiToHex(unsigned char cNum) { if(cNum>='0'&&cNum<='9') { cNum -= '0'; } else if(cNum>='A'&&cNum<='F') { cNum -= 'A'; cNum += 10; } else if(cNum>='a'&&cNum<='f') { cNum -= 'a'; cNum += 10; } return cNum; } /******************************************************************************* * author:szy * data:2018-7-25 * 函数名 : Str_To_Hex * 描述 : 字符串转换hex * 输入 : char *ptr待转换字符串,unsigned short len数据长度 char *str转换后存储区 * 输出 : * 返回 : * 注意 : 如:"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} *******************************************************************************/ void Str_To_Hex(char *ptr, unsigned short len, char *str) { unsigned char n1 = 0; unsigned char n2 = 0; unsigned char num = 0; unsigned short i = 0; unsigned short index = 0; for(i=0; i { index = i << 1; //index=i*2 n1 = AsciiToHex(ptr[index]); n2 = AsciiToHex(ptr[index+1]); num = (n1<<4) + n2; str[i] = num; } } /******************************************************************************* * author:szy * data:2018-12-20 * 函数名 : Hex2Str * 描述 : 16进制数转化成字符串,用于AT+NSOST命令 * 输入 : 输入: pSrc - 源数据指针 * 输出 : 输出: pDst - 目标字符串指针 * 长度 :长度:nSrcLength - 带转换的十六进制字节数 * 返回 : * 注意 : 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01" *******************************************************************************/ void Hex2Str(char* pSrc, char* pDst, unsigned int nSrcLength) { int i = 0; const char tab[]="0123456789ABCDEF"; // 0x0-0xf的字符查找表 for (i = 0; i < nSrcLength; i++) { *pDst++ = tab[*pSrc >> 4]; // 输出高4位 *pDst++ = tab[*pSrc & 0x0f]; // 输出低4位 pSrc++; } // 输出字符串加个结束符 *pDst = '\0'; } /*************************************************** * author:szy * data:2018-7-26 * 功能:两位数十进制转 BCD 码 * 输入: int Dec 待转换的十进制数据 * 返回: unsigned char Bcd 转换后的 BCD 码 *****************************************************/ unsigned char DectoBCD(int Dec) { int i; int temp; unsigned char Bcd; temp = Dec%100; Bcd = ((temp/10)<<4) + ((temp%10) & 0x0F); return Bcd; } //BCD转10进制 //可以用int接收返回值 unsigned char BCDtoDec(unsigned char bcd) { unsigned char Decimal; Decimal=bcd>>4; return(Decimal=Decimal*10+(bcd&=0x0F)); }