当前位置:首页 > 应用开发

将以逗号为间隔的字符串转为数值

 今天给小伙伴们带来一套实用的将逗间隔代码,可以将用逗号等字符间隔的符串字符串转换为数值,这个功能还是数值有一定的应用价值的,需要的将逗间隔小伙伴可以取用哈!

阅读过程中有什么问题可以后台交流哈,图片!

1 关于函数功能的符串说明

1)主要函数介绍

主要函数如下:

① 求m的n次方,拼接数值时用到10的数值n次方。服务器租用

② 找到逗号的将逗间隔位置函数。

③ 字符转数值函数。符串

2)函数功能说明

代码只是数值实现了将字符转数值,将转换结果打印,将逗间隔小伙伴们在实际使用时可以根据自己需要进行改造。符串

代码可以指定保留小数点的数值位数,Str2Num函数中参数dx并没有起到多大效用。将逗间隔

2 实例代码

1)实例代码

说明都在代码注释中了。符串

#include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <string.h> /* 求m的数值n次方 */  uint32_t Pow(uint8_t m,uint8_t n) {       uint32_t result = 1;      while(n--)      {            result *= m;        }       return result; } /* buf中获得第comma个都号的位置 */ uint8_t Comma_Pos(uint8_t *buf,uint8_t comma) {               uint8_t *p = buf;      while(comma)      {               // 遇到*或者非法字符,则不存在第cx个逗号           if(*buf == * || *buf <   || *buf > z)                     {                 return 0xFF;           }           if(*buf == ,)                        // 找到逗号调整逗号数量                                             {                 comma--;           }           buf++;     }     return buf-p;                                // 移动了多少次,服务器托管就是逗号的位置数                                        } /* 将字符串转为数值 */  uint32_t Str2Num(uint8_t *buf,uint8_t *dx) {       uint8_t *p = buf;      uint32_t ires = 0,fres = 0;      uint8_t ilen = 0,flen = 0, i;               // ilen为整数部分长度,flen为小数部分长度      uint8_t mask = 0;      int res;      //得到整数和小数的长度      while(1)                                          {            if(*p == -)                          //是负数           {                 mask |= 0x02;                p++;           }               if(*p == ,||(*p == *))             //遇到结束了,以逗号或星号为结束符            {                 break;            }             if(*p == .)                          //遇到小数点了                                          {                 mask |= 0x01;                 p++;           }               else if( (*p > 9) || (*p < 0) )   //有非法字符           {                  ilen = 0;                flen = 0;                break;           }            if(mask & 0x01)           {                 flen++;       // 遇到小数点则flen小数长度加1                                     }           else            {                 ilen++;       // 否则整数长度ilen加1                                         }           p++;               // 指向缓冲下个位置      }      if(mask & 0x02)         //去掉负号      {            buf++;       }             //得到整数部分数据      for(i = 0; i < ilen; i++)            {              ires += Pow(10, ilen-1-i) * (buf[i] - 0); // buf[0]为最高位数      }      if(flen > 3)                                     //最多取3位小数      {            flen = 3;      }              //小数点位数      *dx = flen;                 //得到小数部分数据      for(i = 0; i < flen; i++)            {              fres += Pow(10, flen-1-i) * (buf[ilen+1+i] - 0);      }       // 获取完整数据 = 将整数部分*10的小数长度次方 + 小数部分      res = ires * Pow(10,flen) + fres;                       if(mask & 0x02) // 如果是负数,给数据加上负号      {            res=-res;                                }       return res; } int main(int argc, char *argv[])  {       uint8_t i;      char ch[100];      uint32_t tmp[3],pos,posx;                          // 最多取3位小数,第一个数小数只取641      strcpy(ch,"-248.6413,148.64,28.64,22.11,");          /* 将4个字符串转数值并打印 */       for(i = 0; i < 4; i++)      {            posx = Comma_Pos(ch, i);           tmp[i] = Str2Num(ch + posx, &pos);           printf("The value %d is: %d\n", i+1, tmp[i]);      }      return 0; } 

2)运行结果

本文转载自微信公众号「嵌入式杂牌军」,作者釜薪君。转载本文请联系嵌入式杂牌军公众号。 

分享到:

滇ICP备2023006006号-16