打印
[Kinetis]

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

[复制链接]
556|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lovecat2015|  楼主 | 2016-1-5 20:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己平时使用到的一些字符与整数的转化。
1,字符转十六进制
static uint8 str2hex(uint8 *str)
{
  uint8 hex[] = "0123456789ABCDEF";
  uint8 i=0,h,l;
  for(i=0;i<16;i++){
    if(hex==str[0])
      h=i;
    if(hex==str[1])
      l=i;
  }
  return (h*16+l);
}


相关帖子

沙发
lovecat2015|  楼主 | 2016-1-5 20:17 | 只看该作者
2,字符串转BCD码
void CharToBcd(char * Cbuf, BYTE * Bbuf,short *blen)
{
   short i,j;
   short tem_len;
   BYTE tem_h;
   BYTE tem_l;
   tem_len = strlen(Cbuf);
   for(i = 0;i < tem_len;i++)
   {
        switch(Cbuf)
        {
           case '0':
           case '1':
           case '2':
           case '3':
           case '4':
           case '5':
           case '6':
           case '7':
           case '8':
           case '9':
              Cbuf = ((Cbuf-0x30)&0x0f);
              break;
           case 'A':
           case 'a':
              Cbuf = 0x0A;
              break;
           case 'B':
           case 'b':
              Cbuf = 0x0B;
              break;
           case 'C':
           case 'c':
              Cbuf = 0x0C;
              break;
           case 'D':
           case 'd':
              Cbuf = 0x0D;
              break;
           case 'E':
           case 'e':
              Cbuf = 0x0E;
              break;
           case 'F':
           case 'f':
              Cbuf = 0x0F;
              break;
        }
   }

使用特权

评论回复
板凳
lovecat2015|  楼主 | 2016-1-5 20:23 | 只看该作者
if((tem_len % 2) == 0)
   {
      for(i = 0 ,j =0; i < tem_len;i++,j++)
      {
          tem_h = (BYTE)(Cbuf<<4)&0xf0 ;
          tem_l = (BYTE)(Cbuf[++i]&0x0f);
          Bbuf[j] = tem_h |  tem_l;
      }
      *blen = (tem_len/2);
   }
   else
   {
     if(tem_len == 1)
     {
          Bbuf[0] = (BYTE)(Cbuf[tem_len-1]&0x0f);
          *blen = tem_len;
     }
     else
     {
        for(i = 0 ,j =0; i < tem_len-1;i++,j++)
        {
          tem_h = (BYTE)(Cbuf<<4)&0xf0 ;
          tem_l = (BYTE)(Cbuf[++i]&0x0f);
          Bbuf[j] = tem_h |  tem_l;
        }
        Bbuf[tem_len/2] = (BYTE)(Cbuf[tem_len-1]&0x0f);
        *blen = (tem_len/2)+1;
     }
   }
}

使用特权

评论回复
地板
lovecat2015|  楼主 | 2016-1-5 20:26 | 只看该作者
3,BCD转十进制
uint8_t bcd2bin (uint8_t val)
{
  return val - 6 * (val >> 4);
}

4,十进制转BCD
uint8_t bin2bcd (uint8_t val)
{
  return val + 6 * (val / 10);
}

使用特权

评论回复
5
lovecat2015|  楼主 | 2016-1-5 20:26 | 只看该作者
5,十进制转BCD
NT8U Dec16toBCD(INT16U Dec, INT8U *Bcd,INT8U length)
{
     INT8U i;
     INT8U temp;

    //for(i=length-1; i>=0; i--)
     for(i=0;i<length;i++)
     {
         temp = Dec%100;
         Bcd = ((temp/10)<<4) + ((temp%10) & 0x0F);
         Dec /= 100;
     }

     return 0;
}

使用特权

评论回复
6
lovecat2015|  楼主 | 2016-1-5 20:27 | 只看该作者
6,BCD转十进制
uint8_t BCDToInt(uint8_t bcd) //BCD转十进制
{
      return ((0xff & (bcd>>4))*10 +(0xf & bcd));
}
7,整数转字符串
static int int2string(long lNum,char chWord[])
{
        int i=0,j;
        char chTemp;
        if(lNum == 0)
        {
                chWord = '0' ;
                i++;
        }
        else
        {
                while(lNum!=0)/*依次取整数的末位,存入chWord */
                {
                        chWord = '0' +lNum%10;/*转换为数字的ASCII码*/
                        i++;
                        lNum = lNum/10;
                }
                //chWord = '\0';        /*字符串最后一位加'\0'*/
                for(j=0;j<i/2;j++)/*将字符串转置*/
                {
                        chTemp = chWord[j];
                        chWord[j] = chWord[i-1-j];
                        chWord[i-1-j] = chTemp;
                }
        }
        return i;
}

使用特权

评论回复
7
lovecat2015|  楼主 | 2016-1-5 20:28 | 只看该作者
8,字符串转十六进制
static unsigned char String2Hex(char* str)
{
        
unsigned char var=0;
unsigned char t;
int len = strlen(str);

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

}

使用特权

评论回复
8
lovecat2015|  楼主 | 2016-1-5 20:29 | 只看该作者
9,十六进制转ASCII
static unsigned char OneHexToASCII(unsigned char aHex)
{
        if((aHex>=0)&&(aHex<=9))
                aHex +=0x30;
        else if((aHex>=10)&&(aHex<=15))//A-F
                aHex += 0x37;
        return aHex;
}
static void HexToASCII(INT8U *buf, INT16U buflen,INT8U *rebuf)
{
        INT8U i,j=0;
        for(i=0;i<buflen;i++)
        {
                //printf("hexbuf=%x\n\r",buf);
                rebuf[j++] = OneHexToASCII((buf>>4)&0x0f);
                rebuf[j++] = OneHexToASCII((buf)&0x0f);
        }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

816

帖子

0

粉丝