[Kinetis] 字符串与十进制之间的转化函数

[复制链接]
832|7
 楼主| lovecat2015 发表于 2016-1-5 20:17 | 显示全部楼层 |阅读模式
自己平时使用到的一些字符与整数的转化。
1,字符转十六进制
  1. static uint8 str2hex(uint8 *str)
  2. {
  3.   uint8 hex[] = "0123456789ABCDEF";
  4.   uint8 i=0,h,l;
  5.   for(i=0;i<16;i++){
  6.     if(hex==str[0])
  7.       h=i;
  8.     if(hex==str[1])
  9.       l=i;
  10.   }
  11.   return (h*16+l);
  12. }


 楼主| lovecat2015 发表于 2016-1-5 20:17 | 显示全部楼层
2,字符串转BCD码
  1. void CharToBcd(char * Cbuf, BYTE * Bbuf,short *blen)
  2. {
  3.    short i,j;
  4.    short tem_len;
  5.    BYTE tem_h;
  6.    BYTE tem_l;
  7.    tem_len = strlen(Cbuf);
  8.    for(i = 0;i < tem_len;i++)
  9.    {
  10.         switch(Cbuf)
  11.         {
  12.            case '0':
  13.            case '1':
  14.            case '2':
  15.            case '3':
  16.            case '4':
  17.            case '5':
  18.            case '6':
  19.            case '7':
  20.            case '8':
  21.            case '9':
  22.               Cbuf = ((Cbuf-0x30)&0x0f);
  23.               break;
  24.            case 'A':
  25.            case 'a':
  26.               Cbuf = 0x0A;
  27.               break;
  28.            case 'B':
  29.            case 'b':
  30.               Cbuf = 0x0B;
  31.               break;
  32.            case 'C':
  33.            case 'c':
  34.               Cbuf = 0x0C;
  35.               break;
  36.            case 'D':
  37.            case 'd':
  38.               Cbuf = 0x0D;
  39.               break;
  40.            case 'E':
  41.            case 'e':
  42.               Cbuf = 0x0E;
  43.               break;
  44.            case 'F':
  45.            case 'f':
  46.               Cbuf = 0x0F;
  47.               break;
  48.         }
  49.    }
 楼主| lovecat2015 发表于 2016-1-5 20:23 | 显示全部楼层
  1. if((tem_len % 2) == 0)
  2.    {
  3.       for(i = 0 ,j =0; i < tem_len;i++,j++)
  4.       {
  5.           tem_h = (BYTE)(Cbuf<<4)&0xf0 ;
  6.           tem_l = (BYTE)(Cbuf[++i]&0x0f);
  7.           Bbuf[j] = tem_h |  tem_l;
  8.       }
  9.       *blen = (tem_len/2);
  10.    }
  11.    else
  12.    {
  13.      if(tem_len == 1)
  14.      {
  15.           Bbuf[0] = (BYTE)(Cbuf[tem_len-1]&0x0f);
  16.           *blen = tem_len;
  17.      }
  18.      else
  19.      {
  20.         for(i = 0 ,j =0; i < tem_len-1;i++,j++)
  21.         {
  22.           tem_h = (BYTE)(Cbuf<<4)&0xf0 ;
  23.           tem_l = (BYTE)(Cbuf[++i]&0x0f);
  24.           Bbuf[j] = tem_h |  tem_l;
  25.         }
  26.         Bbuf[tem_len/2] = (BYTE)(Cbuf[tem_len-1]&0x0f);
  27.         *blen = (tem_len/2)+1;
  28.      }
  29.    }
  30. }
 楼主| lovecat2015 发表于 2016-1-5 20:26 | 显示全部楼层
3,BCD转十进制
  1. uint8_t bcd2bin (uint8_t val)
  2. {
  3.   return val - 6 * (val >> 4);
  4. }

  5. 4,十进制转BCD
  6. uint8_t bin2bcd (uint8_t val)
  7. {
  8.   return val + 6 * (val / 10);
  9. }
 楼主| lovecat2015 发表于 2016-1-5 20:26 | 显示全部楼层
5,十进制转BCD
  1. NT8U Dec16toBCD(INT16U Dec, INT8U *Bcd,INT8U length)
  2. {
  3.      INT8U i;
  4.      INT8U temp;

  5.     //for(i=length-1; i>=0; i--)
  6.      for(i=0;i<length;i++)
  7.      {
  8.          temp = Dec%100;
  9.          Bcd = ((temp/10)<<4) + ((temp%10) & 0x0F);
  10.          Dec /= 100;
  11.      }

  12.      return 0;
  13. }
 楼主| lovecat2015 发表于 2016-1-5 20:27 | 显示全部楼层
6,BCD转十进制
  1. uint8_t BCDToInt(uint8_t bcd) //BCD转十进制
  2. {
  3.       return ((0xff & (bcd>>4))*10 +(0xf & bcd));
  4. }
  1. 7,整数转字符串
  1. static int int2string(long lNum,char chWord[])
  2. {
  3.         int i=0,j;
  4.         char chTemp;
  5.         if(lNum == 0)
  6.         {
  7.                 chWord = '0' ;
  8.                 i++;
  9.         }
  10.         else
  11.         {
  12.                 while(lNum!=0)/*依次取整数的末位,存入chWord */
  13.                 {
  14.                         chWord = '0' +lNum%10;/*转换为数字的ASCII码*/
  15.                         i++;
  16.                         lNum = lNum/10;
  17.                 }
  18.                 //chWord = '\0';        /*字符串最后一位加'\0'*/
  19.                 for(j=0;j<i/2;j++)/*将字符串转置*/
  20.                 {
  21.                         chTemp = chWord[j];
  22.                         chWord[j] = chWord[i-1-j];
  23.                         chWord[i-1-j] = chTemp;
  24.                 }
  25.         }
  26.         return i;
  27. }
 楼主| lovecat2015 发表于 2016-1-5 20:28 | 显示全部楼层
  1. 8,字符串转十六进制
  1. static unsigned char String2Hex(char* str)
  2. {
  3.         
  4. unsigned char var=0;
  5. unsigned char t;
  6. int len = strlen(str);

  7. strupr(str);//统一大写
  8. for (; *str; str++)
  9. {
  10.           if (*str>='A' && *str <='F')
  11.                    t = *str-55;//a-f之间的ascii与对应数值相差55如'A'为65,65-55即为A
  12.           else
  13.                    t = *str-48;
  14.           var<<=4;
  15.           var|=t;
  16. }
  17. return var;

  18. }
 楼主| lovecat2015 发表于 2016-1-5 20:29 | 显示全部楼层
9,十六进制转ASCII
  1. static unsigned char OneHexToASCII(unsigned char aHex)
  2. {
  3.         if((aHex>=0)&&(aHex<=9))
  4.                 aHex +=0x30;
  5.         else if((aHex>=10)&&(aHex<=15))//A-F
  6.                 aHex += 0x37;
  7.         return aHex;
  8. }
  9. static void HexToASCII(INT8U *buf, INT16U buflen,INT8U *rebuf)
  10. {
  11.         INT8U i,j=0;
  12.         for(i=0;i<buflen;i++)
  13.         {
  14.                 //printf("hexbuf=%x\n\r",buf);
  15.                 rebuf[j++] = OneHexToASCII((buf>>4)&0x0f);
  16.                 rebuf[j++] = OneHexToASCII((buf)&0x0f);
  17.         }
  18. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

816

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部