实用的函数:1.一个包含多个小数的字符串对应转换为多个double类型的数据
1.代码示例:
#pragma warning(disable : 4996)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DecimalNum 6
#define DATA_NUM 7
#define ADATA_BUF_LEN 16
char AFrameBuf[DATA_NUM * ADATA_BUF_LEN];
double mdata[7];
int mStrBufferToDuble(char* strBuf,int Num,int pLen, double* Data)
{
int itmp = 0.0, ptmp = 0.0;
int flag = 0;
int plen = 0,flen = 0;
long int pow = 1;int i = pLen;
while (i--)pow = pow * 10;
for (int inum = 0;inum < Num;inum++) {
if (('-' != strBuf[flen]) && ('.' != strBuf[flen]) && (('0' > strBuf[flen]) && ('9' < strBuf[flen])))return 0;
else {
if ('-' == strBuf[flen]) {
flag = 1;
flen++;
}
while (('.' != strBuf[flen])) {
itmp = 10 * itmp + ((int)strBuf[flen] - '0');
flen++;
}
flen++;
while (plen < pLen) {
ptmp = 10 * ptmp + ((int)strBuf[flen] - '0');
plen++;flen++;
}
Data[inum] = flag ? (-(itmp + (double)ptmp / pow)) : (itmp + (double)ptmp / pow);
plen = 0;flag = 0;itmp = 0;ptmp = 0;
}
}
return 1;
}
int main()
{
double d1 = -1234.123456789;
double d2 = 4567.456789123;
double d3 = -20.147258369;
double d4 = -120.159357258;
double d5 = -0.159357258;
double d6 = 0.159357258;
double d7 = 1234567;
sprintf(AFrameBuf,"%.6f%.6f%.6f%.6f%.6f%.6f%.6f",d1,d2,d3, d4, d5, d6,d7);
printf("The frame buffer -> %s\r\n", AFrameBuf);
mStrBufferToDuble(AFrameBuf, DATA_NUM, DecimalNum,&mdata);
for (int i = 0;i < DATA_NUM;i++)printf("The mdata[%d] -> %f\r\n",i,mdata[i]);
return 0;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210603202008348.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Jpbkhlb24=,size_16,color_FFFFFF,t_70)
2.注释:
注①:这是笔者在做项目中,需要的一个功能实现。由于该代码我只用了较短的时间写的,所以可能存在问题,当然也可能存在更好的办法。(写在此处,主要为了做个笔记)。
注②:C语言标准库“stdlib.h”当中有两个函数能够实现“将字符串转换成浮点数”,如果读者的字符串不是很复杂可以使用该函数,即“double atof(const char *nptr);”和“double strtod(const char *nptr,char **endptr);”;使用实例分别为:
示例1:
#include<stdlib.h>
#include<stdio.h>
int main()
{
double mdata;
char mstr[] = "123.456";
mdata=atof(mstr);
printf("The string is %s -> double: %.6f\n",mstr,mdata);
return 0;
}
控制台输出:
The string is 123.456 -> double: 123.456000
示例2:
#include<stdlib.h>
#include<stdio.h>
void main()
{
char *endptr;
char a[] = "12345.6789";
char b[] = "1234.567qwer";
char c[] = "-232.23e4";
printf( "a=%lf\n", strtod(a,NULL) );
printf( "b=%lf\n", strtod(b,&endptr) );
printf( "endptr=%s\n", endptr );
printf( "c=%lf\n", strtod(c,NULL) );
}
控制台输出:
a=12345.678900
b=1234.567000
endptr=qwer
c=-2322300.000000
参考:https: