成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

將以逗號為間隔的字符串轉為數值

開發 前端
今天給小伙伴們帶來一套實用的代碼,可以將用逗號等字符間隔的字符串轉換為數值,這個功能還是有一定的應用價值的,需要的小伙伴可以取用哈!

[[409093]]

 今天給小伙伴們帶來一套實用的代碼,可以將用逗號等字符間隔的字符串轉換為數值,這個功能還是有一定的應用價值的,需要的小伙伴可以取用哈!

閱讀過程中有什么問題可以后臺交流哈,圖片!

1 關于函數功能的說明

1)主要函數介紹

主要函數如下:

① 求m的n次方,拼接數值時用到10的n次方。

② 找到逗號的位置函數。

③ 字符轉數值函數。

2)函數功能說明

代碼只是實現了將字符轉數值,將轉換結果打印,小伙伴們在實際使用時可以根據自己需要進行改造。

代碼可以指定保留小數點的位數,Str2Num函數中參數dx并沒有起到多大效用。

2 實例代碼

1)實例代碼

說明都在代碼注釋中了。

  1. #include <stdio.h> 
  2. #include <stdlib.h> 
  3.  
  4. #include <stdint.h> 
  5. #include <string.h> 
  6.  
  7. /* 求m的n次方 */  
  8. uint32_t Pow(uint8_t m,uint8_t n) 
  9.      uint32_t result = 1; 
  10.     
  11.      while(n--) 
  12.      { 
  13.           result *= m;   
  14.      }  
  15.      
  16.      return result; 
  17.  
  18. /* buf中獲得第comma個都號的位置 */ 
  19. uint8_t Comma_Pos(uint8_t *buf,uint8_t comma) 
  20. {         
  21.      uint8_t *p = buf; 
  22.   
  23.      while(comma) 
  24.      {    
  25.           // 遇到'*'或者非法字符,則不存在第cx個逗號 
  26.           if(*buf == '*' || *buf < ' ' || *buf > 'z')           
  27.           { 
  28.                return 0xFF; 
  29.           } 
  30.    
  31.           if(*buf == ',')                        // 找到逗號調整逗號數量                                   
  32.           { 
  33.                comma--; 
  34.           } 
  35.    
  36.           buf++; 
  37.     } 
  38.       
  39.     return buf-p;                                // 移動了多少次,就是逗號的位置數                                        
  40.  
  41. /* 將字符串轉為數值 */  
  42. uint32_t Str2Num(uint8_t *buf,uint8_t *dx) 
  43.      uint8_t *p = buf; 
  44.      uint32_t ires = 0,fres = 0; 
  45.      uint8_t ilen = 0,flen = 0, i;               // ilen為整數部分長度,flen為小數部分長度 
  46.      uint8_t mask = 0; 
  47.      int res; 
  48.   
  49.      //得到整數和小數的長度 
  50.      while(1)                                     
  51.      { 
  52.           if(*p == '-')                          //是負數 
  53.           { 
  54.                mask |= 0x02; 
  55.                p++; 
  56.           }     
  57.    
  58.           if(*p == ','||(*p == '*'))             //遇到結束了,以逗號或星號為結束符  
  59.           { 
  60.                break;  
  61.           }   
  62.    
  63.           if(*p == '.')                          //遇到小數點了                                
  64.           { 
  65.                mask |= 0x01; 
  66.                 p++; 
  67.           }     
  68.           else if( (*p > '9') || (*p < '0') )   //有非法字符 
  69.           {  
  70.                ilen = 0; 
  71.                flen = 0; 
  72.     
  73.                break; 
  74.           }  
  75.           if(mask & 0x01) 
  76.           { 
  77.                flen++;       // 遇到小數點則flen小數長度加1                           
  78.           } 
  79.           else  
  80.           { 
  81.                ilen++;       // 否則整數長度ilen加1                               
  82.           } 
  83.           p++;               // 指向緩沖下個位置 
  84.      } 
  85.   
  86.      if(mask & 0x02)         //去掉負號 
  87.      { 
  88.           buf++;  
  89.      }        
  90.   
  91.      //得到整數部分數據 
  92.      for(i = 0; i < ilen; i++)       
  93.      {   
  94.           ires += Pow(10, ilen-1-i) * (buf[i] - '0'); // buf[0]為最高位數 
  95.      } 
  96.   
  97.      if(flen > 3)                                     //最多取3位小數 
  98.      { 
  99.           flen = 3; 
  100.      }         
  101.   
  102.      //小數點位數 
  103.      *dx = flen;            
  104.       
  105.      //得到小數部分數據 
  106.      for(i = 0; i < flen; i++)       
  107.      {   
  108.           fres += Pow(10, flen-1-i) * (buf[ilen+1+i] - '0'); 
  109.      }  
  110.   
  111.      // 獲取完整數據 = 將整數部分*10的小數長度次方 + 小數部分 
  112.      res = ires * Pow(10,flen) + fres;                  
  113.   
  114.      if(mask & 0x02) // 如果是負數,給數據加上負號 
  115.      { 
  116.           res=-res;                           
  117.      }  
  118.   
  119.      return res; 
  120.  
  121.  
  122. int main(int argc, char *argv[])  
  123.      uint8_t i; 
  124.      char ch[100]; 
  125.      uint32_t tmp[3],pos,posx;                      
  126.      
  127.     // 最多取3位小數,第一個數小數只取641 
  128.      strcpy(ch,"-248.6413,148.64,28.64,22.11,");     
  129.   
  130.      /* 將4個字符串轉數值并打印 */  
  131.      for(i = 0; i < 4; i++) 
  132.      { 
  133.           posx = Comma_Pos(ch, i); 
  134.   
  135.           tmp[i] = Str2Num(ch + posx, &pos); 
  136.   
  137.           printf("The value %d is: %d\n", i+1, tmp[i]); 
  138.      } 
  139.  
  140.      return 0; 

2)運行結果

本文轉載自微信公眾號「嵌入式雜牌軍」,作者釜薪君。轉載本文請聯系嵌入式雜牌軍公眾號。 

 

責任編輯:武曉燕 來源: 嵌入式雜牌軍
相關推薦

2009-08-28 10:39:37

C#數值字符串

2021-09-17 14:13:28

JavaScript編程字符串

2009-12-01 14:00:37

PHP字符串轉換為數值

2010-09-09 11:48:00

SQL函數字符串

2009-08-20 11:29:21

C#16進制字符串

2021-03-08 08:23:24

Java字符串截取

2024-04-01 08:41:39

字符串.NET

2010-06-28 15:18:51

SQL Server

2009-06-23 14:13:00

Java字符串

2013-05-06 10:54:08

字符串字符串匹配KMP算法

2023-12-15 10:27:01

暴力匹配算法Python字符串

2023-02-26 22:33:32

字符串排列算法

2010-09-13 15:12:26

sql server字

2010-11-26 10:43:48

MySQL分割字符串

2021-05-18 09:08:18

字符串子串對象

2010-10-12 11:13:51

2010-11-26 09:51:54

MySQL字符串

2014-01-02 16:14:10

PostgreSQL字符串

2009-07-16 17:01:09

Swing字符串

2023-01-11 16:49:13

MySQL數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄视频网址| 日韩精品在线观看一区二区三区 | 久久亚洲精品久久国产一区二区 | 神马影院一区二区三区 | 日韩一级欧美一级 | 日韩中文字幕一区 | 日韩成人免费视频 | 日韩成人 | 日韩视频在线免费观看 | 久久综合伊人 | 可以在线观看av的网站 | 中文字幕一区二区三区在线乱码 | 中文字幕加勒比 | 狠狠躁夜夜躁人人爽天天高潮 | 欧美精品乱码久久久久久按摩 | 日韩欧美字幕 | 日本欧美大片 | 欧美国产一区二区 | 欧美激情精品久久久久久变态 | 久久网一区二区三区 | 欧美精品1区2区3区 精品国产欧美一区二区 | 欧美一区二区三区四区在线 | 中文字幕av一区 | 国产欧美一区二区三区在线看 | 黑人一级黄色大片 | 日韩精品视频在线 | 欧美成人精品激情在线观看 | 日韩中文字幕在线视频观看 | 欧洲妇女成人淫片aaa视频 | 一区二区三区四区不卡视频 | 国产精品久久亚洲 | 免费一级黄 | 99精品网| 欧美日韩不卡合集视频 | 亚洲一区二区三区视频免费观看 | 国产亚洲一区精品 | 在线看av网址 | 日本成人综合 | 久久久久久av | 中文字幕不卡在线观看 | www..99re|