c语言 字符串转浮点型函数
生活随笔
收集整理的這篇文章主要介紹了
c语言 字符串转浮点型函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
寫了一個將字符串轉換為浮點型的函數,用于上位機與單片機的數據傳輸。該函數只需傳入一個字符串數組(指針)與一個用于存放轉換數據的double類型的數組,即可完成數據的轉換。該函數可以輸入任意長度的字符串(包含任意個數的浮點數)并且對任意浮點數都有效(無論正負與位數多少),只需在每個浮點數之間用逗號隔開,并且在結尾處加上分號結束。
以下是代碼:
1、聲明
//參數的含義:*string:包含數字信息的字符串,數字之間需要用逗號隔開,結尾為分號,如:11.2,-23.6,63.5; //*data:儲存轉換后數據的數組. void string_to_float(char *string, double *data);2、函數
#include "math.h"void string_to_float(char *string, double *data) {unsigned int i=0,j=0,k=0;unsigned char flag=0; //判斷正負號的標志unsigned char flag_dot=1; //判斷小數點的標志double num=0; //臨時存儲計算結果的變量for(i=0;*(string+i)!=';';i++) //循環直到字符串結尾{if(*(string+i)>='0'&&*(string+i)<='9'&&flag_dot==1) //如果當前字符為數字且在小數點之前{if(j==0) num = num*pow(10,j)+(double)(*(string+i)-'0'); //運算并存儲中間計算結果else num = num*pow(10,1)+(double)(*(string+i)-'0');j++;}else if(*(string+i)>='0'&&*(string+i)<='9'&&flag_dot==0) //如果當前字符為數字且在小數點之后{num = num+(double)(*(string+i)-'0')*pow(0.1,j+1); //運算并存儲中間計算結果j++;}else if(*(string+i)=='.') //讀到了小數點則將對應標志位數值改變{flag_dot=0;j=0;}else if(*(string+i)=='-') //讀到減號同樣改變對應標志位的值{flag = 1;}else if(*(string+i)==',') //讀完一個數據,重置標志位,記錄最終計算結果{*(data+k) = num*pow(-1,flag);flag = 0;flag_dot=1;j=0;k++;num = 0;}}*(data+k) = num*pow(-1,flag); //補上最后一個數 }該函數完全匹配正點原子的串口接收代碼,只需要將存儲接收數據的數組指針USART_RX_BUF傳入函數即可。代碼如下
if(USART_RX_STA&0x8000){ if (USART_RX_BUF[0]=='M'){string_to_float(USART_RX_BUF, data); printf("%f,%f,%f,%f,%f,%f;\r\n",data[0],data[1],data[2],data[3],data[4],data[5]);USART_RX_STA=0;}}這里的if (USART_RX_BUF[0]=='M')只是為了判斷字符串數據幀的頭部,不要也可,而且在字符串前面添加想要的數據頭也不會影響計算結果,運行結果如下:
?直接輸入字符串也是一樣的
string_to_float("-3.258,64.211,-118.38,-35.233,114503.258211,-2511235.3878;", data); printf("%f,%f,%f,%f,%f,%f;\r\n",data[0],data[1],data[2],data[3],data[4],data[5]);相關的頭文件與.c文件也上傳了,審核中。
總結
以上是生活随笔為你收集整理的c语言 字符串转浮点型函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python解运筹学问题
- 下一篇: 自助任务平台WQ5.5.6源码对接微信带