关于Linux C++上,将float型,long型,double型写入文件
关于Linux C++下,将float型,long型,double型写入文件
想将float型,long型,double型等数据类型写入文件,如下程序所示,理想中的结果应该是这样:
hello word!just do it!3.123445,但是运行该代码,后面的3。123445显示不出来,而且是乱码,求高手帮忙指点,有什么好的办法么?请指教,谢谢!
------解决方案--------------------
这里: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到文件中,然后用记事本打开,你期望会看到什么?
想将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到文件中,然后用记事本打开,你期望会看到什么?