关于读取文件

crescent_star 2008-05-13 01:12:23
有这样的一个文件,直接使用记事本打开是乱码,但用ultra edit打开能看到它的16进制编码。

我用fopen or fstream读取这个文件都只能读到记事本打开看到的内容,然后我把这些内容转化为ASCII 16进制编码,就和ultra edit里看到的内容一样了。

只是现在我的需求是,要直接修改这个文件的16进制编码,在ultra edit里能够实现,但通过什么样的方式能够读取到这个文件的16进制编码呢。。。额

试过了fopen的rb模式,试过了fstream控制...求教~
...全文
93 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mnky 2008-05-13
  • 打赏
  • 举报
回复
和读取没关系,是显示的问题。。。
读进来以后,在内存里都是16进制的,但是你用printf显示出来的话,会自动又拼接成字符,也就是乱码。
你要想改16进制代码,直接按数组寻址改就对了,读文件用 rb 就行。
crescent_star 2008-05-13
  • 打赏
  • 举报
回复
不用,都可以我试过了,只要printf("%02X",dw)就行
cout<<...就输出为用记事本打开看见的文本了。

额。要不我再在这里问个问题吧....汗...Chiyer。。

如果我要这样修改这个文件:例如,在记事本里打开显示为 ??
如果用printf("%02X",dw)看见的16进制编码为B7 17
如果我想通过修改B7 17为B7 B7
,不知有什么办法,我只能够修改那两个问号...
phoenix3 2008-05-13
  • 打赏
  • 举报
回复
fgets(ch,16,fpFile);
换成
fread(ch,1,16,fpFile);

fpFile = fopen("filename","r+b");
visame 2008-05-13
  • 打赏
  • 举报
回复
应该是读二进制文件
crescent_star 2008-05-13
  • 打赏
  • 举报
回复
先发上来,我继续研究
crescent_star 2008-05-13
  • 打赏
  • 举报
回复
thx我在dev c++里一试是可以的,因为我刚开始一直运行环境是C++ Builder,而且将结果直接输入到文件中了,然后就显示的如我提的问题,我开始是这么写的

char ch[16];
for (int i = 0; i < file_len; ++i) {
fgets(ch,16,fpFile);
for(int temp=0;temp<16;temp++)
printf("%02X ",ch[temp]);
}
星羽 2008-05-13
  • 打赏
  • 举报
回复


#include "stdlib.h"
#include "stdio.h"

int main()
{
FILE* fpFile = fopen("test.txt", "rb");
if (!fpFile)
return 1;

unsigned char* bytebuff = 0;
fseek(fpFile, 0, SEEK_END);
int file_len = ftell(fpFile);
fseek(fpFile, 0, SEEK_SET);

bytebuff = new unsigned char[file_len];
fread(bytebuff, file_len, 1, fpFile);

for (int i = 0; i < file_len; ++i) {
unsigned long dw = (unsigned long)bytebuff[i];
if (!(i % 10) && i != 0)
printf("\n");
printf("%02X ", dw);
}

delete bytebuff;
fclose(fpFile);
return 0;
}

babyvox1999 2008-05-13
  • 打赏
  • 举报
回复
读2进制的不就可以转成16进制的
星羽 2008-05-13
  • 打赏
  • 举报
回复
什么程序 控制台? win32 ?
通过一种什么方式修改?

64,647

社区成员

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

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