铸造浮动的问题 - 当fread时,在C中加倍

Gre*_*rey 0 c c++ file-io

我在fread时从浮动到双重铸造有问题;

fread(doublePointer,sizeofFloat,500,f);
Run Code Online (Sandbox Code Playgroud)

如果我将双指针更改为浮点指针,它可以正常工作.但是,我需要它是laster on的双指针,我想当我从小数据类型(float)写入更大的数据类型(double)的内存时,它应该没问题.但事实证明它不像我预期的那样有效.这有什么问题,我该如何解决这个问题.

我知道我可以通过逐个转换来解决它.但我有大量的数据.我不想额外9000000+轮转换..这将是非常昂贵的.有什么技巧可以解决吗?

有没有c ++/c技巧

谢谢

bdo*_*lan 6

如果将float格式的数据写入double,那么结果只会产生垃圾.当然,你不会溢出你的缓冲区,但这不是唯一的问题 - 它仍然会找到两个浮点数,它期望一个双倍.你需要将它作为一个浮点读取,然后转换 - 以这种方式转换(甚至隐式)让编译器知道数据最初是一个浮点数并且需要转换:

float temp[500];
int i;

fread(temp, sizeof(temp[0]), 500, f);
for (i = 0; i < 500; i++)
    doublePointer[i] = temp[i];
Run Code Online (Sandbox Code Playgroud)

  • 转换必须在某种程度上完成.float和double just flat out不要以相同的格式存储它们的位. (5认同)
  • @grey,500的迭代是一个实际问题,还是一个理论问题?我首先处理实际问题(在这种情况下正确读取值似乎更重要和真实) (2认同)
  • 除了转换必须在某个地方发生的事实之外,请记住,时间将由文件输入而不是转换循环控制. (2认同)
  • 如果正确完成,转换应该比读取的文件快得多.实施它,检测它,测量瓶颈所在,*然后*担心性能. (2认同)