怎么把gif文件转化成16进制的txt文件

fdclf 2008-10-14 05:09:05
数据原格式为:
47 49 46 ……
转换后的格式为:
0x47,0x49,0x46……

我写了程序,但老不对,请高手指教啊
...全文
549 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
duke56 2010-08-21
  • 打赏
  • 举报
回复
读取和写入最好都控制一下数据量

fprintf(fp2, "%.2X%.2X", (unsigned int)(unsigned char)ch);
zwd_125 2010-08-21
  • 打赏
  • 举报
回复
第一行数据是十六进制表示的还是十进制表示的?
wwwzwb 2010-08-21
  • 打赏
  • 举报
回复
13这个还是有点问题。。。。
fp = fopen("ci.gif","r");
改为 fp = fopen("ci.gif","rb");
  • 打赏
  • 举报
回复
up oo老大
  • 打赏
  • 举报
回复
up oo老大
oo 2008-10-15
  • 打赏
  • 举报
回复
#include<stdio.h>
int main()
{
FILE *fp = NULL;
FILE *fp2 = NULL;
char ch;
fp = fopen("ci.gif","r");
fp2 = fopen("a.txt","w");
while((ch = fgetc(fp)) != EOF) {
fprintf(fp2, "0X%-2X,", (unsigned int)(unsigned char)ch);
}
fclose(fp);
fclose(fp2);
return 0;
}
mallco 2008-10-15
  • 打赏
  • 举报
回复
以前写过的一个函数 输入文件名字就行了
int makfile(const char * sour_name,const char * disn_name)
{
FILE * fd1;
FILE * fd2;
int i=1;
int c;
fd1 = fopen(sour_name,"r");
fd2 = fopen(disn_name,"w");
while((c=getc(fd1))!= EOF){
fprintf(fd2,"0x%00x,",c);
if((++i)%8 == 0){
fprintf(fd2,"\n");
}
}
return 0;
}
fdclf 2008-10-15
  • 打赏
  • 举报
回复
#include<stdio.h>
int main()
{
FILE *fp = NULL;
FILE *fp2 = NULL;
char ch;
int i;
fp = fopen("ci.gif","r");
fp2 = fopen("a.txt","w");
ch = fgetc(fp);
while(!feof(fp))
{
for(i=0;i<16;i++)
{
if(feof(fp)) break;
else
{
fprintf(fp2, "0X%02X,", (unsigned int)(unsigned char)ch);
}
if(i==15)
{
fprintf(fp2,"\n");i=-1;
}
ch = fgetc(fp);

}

}
fclose(fp);
fclose(fp2);

return 0;
}

终于把它给弄好了,但不是我弄的。这样的输出结果就完全正确了。
fdclf 2008-10-15
  • 打赏
  • 举报
回复
但是还是有问题耶。。
fdclf 2008-10-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mmidd 的回复:]
你以二进制方式打开文件

然后每四位转换成一个十六进制数

就像一些文本工具那样
[/Quote]
高手,能说下具体怎么弄吗?我是初学C语言的,很多都不太懂。
mmidd 2008-10-14
  • 打赏
  • 举报
回复
你以二进制方式打开文件

然后每四位转换成一个十六进制数

就像一些文本工具那样
fdclf 2008-10-14
  • 打赏
  • 举报
回复
运行结果是:
0X47,0X49,0X46,0X38,0X39,0X61,0X10,0X0 ,0X10,0X0 ,0XFFFFFFA2,0X0 ,0X0 ,0XFFFFFFC6,0XFFFFFFC3,0XFFFFFFC6,0XFFFFFFCC,0X33,0X0 ,

有些数不对,比如说0XFFFFFFA2,其实应该是0XA2。
还有一个问题就是如果碰到FF的数就会停止执行了,这怎么解决啊?
fdclf 2008-10-14
  • 打赏
  • 举报
回复
#include<stdio.h>
int main()
{
FILE *fp = NULL;
FILE *fp2 = NULL;
char ch;
fp = fopen("ci.gif","r");
fp2 = fopen("a.txt","w");
while((ch = fgetc(fp)) != EOF) {
fprintf(fp2, "0X%-2X,", ch);
}
fclose(fp);
fclose(fp2);
return 0;
}
fdclf 2008-10-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 phz1985 的回复:]
C/C++ code
FILE *fp1 = fopen("***.gif", "r");
FILE *fp2 = fopen("***.txt", "w");
fprintf(fp2, "0X%0X%d", fgetc(fp1));
[/Quote]
按照你的程序运行结果是:0X472367460
是什么原因啊?没有全部转换
hearoequal 2008-10-14
  • 打赏
  • 举报
回复
你那个就是ASC码对应的数字转换16进制的问题
和GIF有什么关系???
phz1985 2008-10-14
  • 打赏
  • 举报
回复

FILE *fp1 = fopen("***.gif", "r");
FILE *fp2 = fopen("***.txt", "w");
fprintf(fp2, "0X%0X%d", fgetc(fp1));

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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