VS2010c++, 我用readfile读不出原来写入的内容了,求助啊!
voidmain(){//writefile();readfile();}voidwritefile(){FILE*fp;fp=fopen("c:\\1.txt","w"...
void main()
{
//writefile();
readfile();
}
void writefile()
{
FILE* fp;
fp = fopen("c:\\1.txt", "w");
int a = 0x1b;
fwrite(&a, sizeof(a), 1, fp);
getchar();
}
void readfile()
{
FILE* fp;
fp = fopen("c:\\1.txt", "r");
int b;
fread(&b, sizeof(b), 1, fp);
printf("b=%x",&b);
getchar();
}
我是想以16进制读出原来的输出,也就是想办法输出b=1b这样,但是目前不得,谢谢 展开
{
//writefile();
readfile();
}
void writefile()
{
FILE* fp;
fp = fopen("c:\\1.txt", "w");
int a = 0x1b;
fwrite(&a, sizeof(a), 1, fp);
getchar();
}
void readfile()
{
FILE* fp;
fp = fopen("c:\\1.txt", "r");
int b;
fread(&b, sizeof(b), 1, fp);
printf("b=%x",&b);
getchar();
}
我是想以16进制读出原来的输出,也就是想办法输出b=1b这样,但是目前不得,谢谢 展开
展开全部
对于fopen("c:\\1.txt", "w");方式打开的文件,默认的是.txt文件,即存储的是ASCII码,而fwrite(&a, sizeof(a), 1, fp);写入的是数值,显然打开与写入是不和谐的。我个人的建议是,对于.txt文件,应该用fprintf()函数写入,用fscanf()函数读出,这样才能够配套,而对于.bin文件,写入用fwrite(),读出用fread(),这样才能保证写入与读出数据的一致性。
现在回到你的问题上来,因为是用fwrite(&a, sizeof(a), 1, fp);写入的,磁盘文件存储的是连续4个字节(也可能是2个字节,与C的具体实现有关),也就是二进制表示的数,与计算机内存中的表示方法相同,读出时,用的是fread(&b, sizeof(b), 1, fp);,那么如何解读b的内容,完全由你来决定,比如,可以当作4个字符,也可以当作一个整数。那么就你的要求来说,你需要的是数值,因为存储方式是二进制的,即0X1B = (00000000000000000000000000011011)2,也就是十进制的27,对应于键盘上<Esc>的键值,输出格式用"%d"或"%u"或"%i"等,得到的是27,用"%X"的到的是1B,也就是说对于具体内容,得到的结果与输出格式有关。
现在回到你的问题上来,因为是用fwrite(&a, sizeof(a), 1, fp);写入的,磁盘文件存储的是连续4个字节(也可能是2个字节,与C的具体实现有关),也就是二进制表示的数,与计算机内存中的表示方法相同,读出时,用的是fread(&b, sizeof(b), 1, fp);,那么如何解读b的内容,完全由你来决定,比如,可以当作4个字符,也可以当作一个整数。那么就你的要求来说,你需要的是数值,因为存储方式是二进制的,即0X1B = (00000000000000000000000000011011)2,也就是十进制的27,对应于键盘上<Esc>的键值,输出格式用"%d"或"%u"或"%i"等,得到的是27,用"%X"的到的是1B,也就是说对于具体内容,得到的结果与输出格式有关。
追问
磁盘文件存储的是连续4个字节(也可能是2个字节,与C的具体实现有关),为什么是4 或者2个字节 ,不是应该是我1.TXT的内容么
追答
在VS2010中,int类型就是4个字节,也就是(00000000000000000000000000011011)2,但在早期的TC中,是2个字节。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询