C语言:各种数据类型转换函数

#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));

}

 

 

你可能感兴趣的:(C语言:各种数据类型转换函数)