为了账号安全,请及时绑定邮箱和手机立即绑定

网上都说2进制文件读取要用rb 但是我明显是用rb方式 但是就是不行,求解原因是什么 如何修改?

网上都说2进制文件读取要用rb 但是我明显是用rb方式 但是就是不行,求解原因是什么 如何修改?

C C++
紫衣仙女 2023-03-05 08:04:48
FILE *a=fopen("C:/123.exe","rb");fseek(a,0L,SEEK_END);long b=ftell(a);char * loc=(char *)malloc(b);if(loc==NULL)printf("error");memset(loc,0,b);fseek(a,0L,SEEK_SET);fread(loc,b,1,a);fclose(a);以rb方式打开,例如我自己创建个1.exe记事本方式打开写入 abc 123 就可以正确读取,但是如果是BMP那类的文件 就只读取前面几个字符(都是字符后有空格) 之后就都不读取了,为什么?
查看完整描述

2 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

根据你的程序,应当是读进来了;
但最好按照unsigned char读入,另外也不能按照字符串处理,因为二进制文件中有许多0,打印输出时以%x格式打印。
另外你还要判断一下这个b会不会超过64k,如果超大,需要用大模式来编译程序,以便支持大的内存区访问。建议用小些的文件测试。

查看完整回答
反对 回复 2023-03-08
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

"C:/123.exe"这里应该是"C:\\123.exe"才对,其他没有大问题。fread是按字节读取的,.exe文件有好多数据按字符是无法显示的,不知你是怎么判断没有读取正确。

查看完整回答
反对 回复 2023-03-08
  • 2 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信