C++ 将字符转换为浮点值

C++ 将字符转换为浮点值,c++,file,char,C++,File,Char,所以我有一些代码看起来有点像这样,其中文件“float”是一个带有float值的文件 文件*f; 浮动a; f=fopen(“浮动”、“rb”); 字符缓冲区[sizeof(float)]; 如果(fgets(buffer,sizeof buffer,f)=NULL)中断; 那么,我如何将信息从缓冲区转换为一个?您可以从头cstdlib使用 char* end; a = strtof(buffer, &end); if (*end != '\0' && *end !=

所以我有一些代码看起来有点像这样,其中文件“float”是一个带有float值的文件

文件*f;
浮动a;
f=fopen(“浮动”、“rb”);
字符缓冲区[sizeof(float)];
如果(fgets(buffer,sizeof buffer,f)=NULL)中断;
那么,我如何将信息从缓冲区转换为一个?

您可以从头
cstdlib
使用

char* end;
a = strtof(buffer, &end);
if (*end != '\0' && *end != '\n') {
    /* handle error : invalid character exists */
}

请注意,
sizeof(float)
通常为4位,因此最多只能接受2位数字。(其余2个元素用于换行符和终止空字符)当您说“具有浮点值的文件”时,您的意思是该文件包含表示浮点的ASCII字符字符串,还是该文件中的字节本身构成IEEE 754浮点?如果该文件实际包含二进制
浮点
,请使用
fread()
而不是
fgets()
,并且知道实际上可以完全去掉
缓冲区
,直接读入
a
,例如:
float a;如果(fgets(&a,sizeof a,1,f)!=1{…}。。。fclose(f) BTW,这个代码看起来比C++更C,你确定问题正确地被标记了吗?是的,代码是C++的,“浮动”文件携带了一个值的文本表示。这个解决方案假定文件包含浮点值的文本表示。OP的代码以二进制模式打开文件,并分配一个足够大的缓冲区来容纳二进制
浮点值
,这表明实际情况可能并非如此。尽管使用
fgets()
让人怀疑。。。