#include <string.h>
#include <stdio.h>
#include <stdlib.h>
/*
* 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<len; 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 <stdio.h>
#include <stdlib.h>
#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<num;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<num;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<len; 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));
}