关于Linux C++上,将float型,long型,double型写入文件

关于Linux C++下,将float型,long型,double型写入文件
想将float型,long型,double型等数据类型写入文件,如下程序所示,理想中的结果应该是这样:
hello word!just do it!3.123445,但是运行该代码,后面的3。123445显示不出来,而且是乱码,求高手帮忙指点,有什么好的办法么?请指教,谢谢!
C/C++ code

#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <string>
#include <stdio.h>
#include <string.h>
using namespace std;    
    int main(int argc,char **argv)
    {
      FILE *fp1;
      int fd;
      long long fo = 3.123445;
      char b[8];
      memcpy(b,&fo,sizeof(unsigned long));
      string str1 = "hello word!";
string str2 = "just do it!";    
      fp1 = fopen("test.txt","a+");
     fd = fileno(fp1);
    write(fd,str1.c_str(),str1.length());
write(fd,str2.c_str(),str2.length()); 
write(fd,b,8);
       
    }




------解决方案--------------------
这里:write(fd,b,8);
b是二进制,当然是乱码了,你以为从fo memcpy一下就变成字符串啦?

fprintf(fp1, "%ld", fo);
试试。
------解决方案--------------------
memcpy(b,&fo,sizeof(unsigned long));
把fo的地址写进去了
sprintf
------解决方案--------------------
我有点蒙了。long long应该属于长整型变量,为什么楼主整出了3.14512这个小数的形式了??还有就是使用memcpy是内存拷贝,数据表示方式不同,拷贝过去后表现出来的数据肯定是不一样的吧。
------解决方案--------------------
对电脑而言只有二进制字节,对人脑才有float型,long型,double型等数据,有hello word!just do it!3.123445
推荐使用WinHex软件查看文件或内存中的原始字节内容。

------解决方案--------------------
楼主啊,首先解决这个问题:写一个32位float到文件中,然后用记事本打开,你期望会看到什么?