float包含超过4byte

时间:2017-02-11 19:09:57

标签: c

我想通过读取二进制文件在我的txt文件中写入值4.0,看起来像

  

0000000:046a 6f68 6e03 646f 6500 0000 0140 8000 .john.doe .... @ ..

     

0000010:00

我想要这个输出。

  

0000000:6a6f 686e 2064 6f65 2031 2034 2e30 0a john doe 1 4.0。

我的问题是编写浮动值。

char buffer[NAME_MAX];
float *gpaPtr;
float gpaNumber = 0;

fread(buffer, sizeof(float)  , 1, fp);
gpaPtr = buffer;
gpaNumber = (float)*gpaPtr;
printf("%f\n", gpaNumber);
clearArray(buffer);

fprintf(fp2,"%s %s %d %f\n" ,firstName, lastName, idNumber,gpaNumber );

当我使用此代码在文件中写入时,它就是这个。

  <00> 0000000:6a6f 686e 2064 6f65 2031 2034 2e30 3030 john doe 1 4.000000

     

0000010:3030 300a

我的代码写的比我想要的多。

我使用浮点指针指向缓冲区的第一个地址,它应该只写我认为浮点数的大小(gpaPtr和gpaNumber都是浮点数)

我猜这个问题是由32个单精度类型和64个双精度引起的。

请让我知道如何获得正确大小的gpa以及为什么会这样。

1 个答案:

答案 0 :(得分:0)

请阅读有关printf()功能的一些文档。请密切关注%f转化说明符的“精确度”字段。

http://en.cppreference.com/w/c/io/fprintf