【问题标题】:Convert char aray to a floting point value将 char 数组转换为浮点值
【发布时间】:2021-07-16 03:41:49
【问题描述】:

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

FILE* f;
float a;
f = fopen("float", "rb");
char buffer[sizeof(float)];
if (fgets(buffer, sizeof buffer, f) == NULL) break;

那么我如何将信息从缓冲区转换为a?

【问题讨论】:

  • 请注意,sizeof(float) 通常为 4,因此最多只能接受 2 位数字。 (其余 2 个元素用于换行符和终止空字符)
  • 当您说“具有浮点值的文件”时,您的意思是该文件包含代表浮点数的 ASCII 字符串,还是文件中的字节本身构成 IEEE 754 浮点数?
  • 如果文件实际上包含二进制float,请使用fread() 而不是fgets(),并且知道您实际上可以完全摆脱buffer,直接读入@987654327 @ 而不是,例如:float a; if (fgets(&a, sizeof a, 1, f) != 1) { ... } ... fclose(f);
  • 顺便说一句,这段代码看起来更像 C 而不是 C++,你确定你的问题标记正确吗?
  • 是的,代码在 c++ 中,“float”文件带有值的文本表示

标签: c++ file char


【解决方案1】:

您可以使用标题 cstdlib 中的 strtof()

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

【讨论】:

  • 此解决方案假定文件包含浮点值的文本表示。 OP 的代码以二进制模式打开文件,并分配一个足够大的缓冲区以容纳二进制 float,这一事实表明情况可能并非如此。虽然fgets() 的使用让人对此产生怀疑......
猜你喜欢
  • 2011-02-28
  • 2019-01-06
  • 2020-09-02
  • 1970-01-01
  • 2017-10-24
  • 2011-06-08
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多