C++基础

andylauxing 2015-09-14 10:53:38
初学C,C++, 现在有一基础问题
long a;
fseek(fp,0L,SEEK_SET);
1. 原来用fgetc()一次读一个字节,可正确出显示
a = fgetc(fp);
a + = fgetc(fp)<<8;
a + = fgetc(fp)<<8<<8;
a + = fgetc(fp)<<8<<8<<8;
cout<<"a 16进制 "<<hex<<a<<endl;

2. 现在想换一种方法,用fread一次读取4个字节:
char fldValue[4]; //
fread(fldValue,4,1,fp); //这样读有问题吗?
cout<<"fldValue 16进制 "<<hex<<a<<endl;
以上显示的是asc码,请问如何把这读取四个字符,转成与方法1一样的结果?

说明: 其实要读的这四个字节,表示的是一个地址值(如:1266 ,16进制表示为: 00 00 03 1F)
...全文
309 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluewanderer 2015-09-20
  • 打赏
  • 举报
回复
引用 7 楼 andylauxing 的回复:
[quote=引用 5 楼 u010982299 的回复:] 这样吧 int val=0; fread(&val,4,1,fp); cout<<hex<<val<<endl;
可能是我int型类型用错了(用char[4]),晚上回家验证一下,由此又生一困惑,如果: fread(&val,10,1,fp); 一次读出10个字节,那在这里实际存入的是否是只有4个字节 ,多出的6个字节丢失 ? (int型 32位是占 4个字节 ) [/quote] 不会丢失,会泄漏,程序进入UB暴走模式
「已注销」 2015-09-20
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
乍看起来c++的cin、cout、ifstream、ofstream在输入、输出上比c的scanf、printf、fscanf、fprintf、fread、fwrite简单,不用格式控制符! 但是不用格式控制符,输入输出恰好是你期望的格式的时候好说;等到输入输出不是你期望的格式的时候,你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout、ifstream、ofstream! 使用scanf、printf、fscanf、fprintf、fread、fwrite。
为什么要用C里面的,不用C++的
andylauxing 2015-09-17
  • 打赏
  • 举报
回复
引用 5 楼 u010982299 的回复:
这样吧 int val=0; fread(&val,4,1,fp); cout<<hex<<val<<endl;
可能是我int型类型用错了(用char[4]),晚上回家验证一下,由此又生一困惑,如果: fread(&val,10,1,fp); 一次读出10个字节,那在这里实际存入的是否是只有4个字节 ,多出的6个字节丢失 ? (int型 32位是占 4个字节 )
  • 打赏
  • 举报
回复
单步调试会不会?查看你获取的数据是否有误,还是转换到16进制出问题就行了
true__false 2015-09-16
  • 打赏
  • 举报
回复
这样吧 int val=0; fread(&val,4,1,fp); cout<<hex<<val<<endl;
赵4老师 2015-09-15
  • 打赏
  • 举报
回复
乍看起来c++的cin、cout、ifstream、ofstream在输入、输出上比c的scanf、printf、fscanf、fprintf、fread、fwrite简单,不用格式控制符! 但是不用格式控制符,输入输出恰好是你期望的格式的时候好说;等到输入输出不是你期望的格式的时候,你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout、ifstream、ofstream! 使用scanf、printf、fscanf、fprintf、fread、fwrite。
andylauxing 2015-09-15
  • 打赏
  • 举报
回复
方法2纠正一下,不是输出变量a,是fldValue(红色处) 2. 现在想换一种方法,用fread一次读取4个字节: char fldValue[4]; // fread(fldValue,4,1,fp); //这样读有问题吗? cout<<"fldValue 16进制 "<<hex<<fldValue<<endl;
andylauxing 2015-09-15
  • 打赏
  • 举报
回复
引用 1 楼 u010982299 的回复:
cout<<hex<<*(int *)a<<endl;
方法1没问题,我问的是方法2如何实现方法1中的输出结果, 谢谢.
true__false 2015-09-15
  • 打赏
  • 举报
回复
cout<<hex<<*(int *)a<<endl;

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧