问一个关于修改文档内容的问题

natineprince 2007-03-18 06:27:14
例如我想将"ABC.DAT"(用16进制存储)里面的"A1 C3 03 95 DD 2A"(用UE32查看)修改成"A1 C3 AA DD 9A 2A".

问题一:
我应该怎么像UE那样将ABC.DAT读取成16进制类UE32的显示放在数组?

问题二:
怎么查找任意长度的16进制数据?

谢谢各位高手指点一二...
...全文
277 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2007-03-19
  • 打赏
  • 举报
回复
注释一下:
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fp=fopen("test.txt", "r+");
int x[6]={0}, //这个是辅助数组,用于读取文件中的数值
y[]={0xA1, 0xC3, 0x03, 0x95, 0xDD, 0x2A}, //需要修改的一系列值
z[]={0xA1, 0xC3, 0xAA, 0xDD, 0x9A, 0x2A}; //修改为这个数组中的值
int i=0, start;
fscanf(fp, "%x", &x[i]);
while(!feof(fp)) //读取并循环,判断是否找到需要修改的系列数据
{
if(x[i] == y[i]){if(i==0)start=ftell(fp);i++;} //start保存修改位置
else i=0;

if(i==6)break; //找到了, break退出
fscanf(fp, "%x", &x[i]);
}
fseek(fp, start-2, SEEK_SET); //移动指针,开始写入信息
fprintf(fp, "%x", z[0]);
for(i=1; i<6; i++)fprintf(fp, " %x", z[i]); //格式控制可以调整 ~

system("PAUSE");
return 0;
}
jixingzhong 2007-03-19
  • 打赏
  • 举报
回复
/*
test.txt 初始内容:
A1 C1 03 95 DD 1A
A1 C2 03 95 DD 2A
A1 C3 03 95 DD 2A //这行是需要修改的
A1 C4 03 95 DD 3A

运行后内容:
A1 C1 03 95 DD 1A
A1 C2 03 95 DD 2A
a1 c3 aa dd 9a 2a //OK
A1 C4 03 95 DD 3A
*/

参考程序:
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fp=fopen("test.txt", "r+");
int x[6]={0},
y[]={0xA1, 0xC3, 0x03, 0x95, 0xDD, 0x2A},
z[]={0xA1, 0xC3, 0xAA, 0xDD, 0x9A, 0x2A};
int i=0, start;
fscanf(fp, "%x", &x[i]);
while(!feof(fp))
{
if(x[i] == y[i]){if(i==0)start=ftell(fp);i++;}
else i=0;

if(i==6)break;
fscanf(fp, "%x", &x[i]);
}
fseek(fp, start-2, SEEK_SET);
fprintf(fp, "%x", z[0]);
for(i=1; i<6; i++)fprintf(fp, " %x", z[i]);

system("PAUSE");
return 0;
}
jixingzhong 2007-03-19
  • 打赏
  • 举报
回复
问题二:
怎么查找任意长度的16进制数据?
=================
任意长,
那就只有使用字符串 ~

在你的情况下,
没有所谓的任意长,
它们都是 空格分隔 了嘛 ~

所以你可以这样做,
用一连续的数值比较来判断,
恩, 给个例子程序吧,
先等等 ~~
jixingzhong 2007-03-19
  • 打赏
  • 举报
回复
问题一:
我应该怎么像UE那样将ABC.DAT读取成16进制类UE32的显示放在数组?
================
1 字符方式, 这个比较麻烦
2 数值方式:fscanf(fp, "%x", x); //x读取A1这样的 数值, 空格分割数据

然后回写文件时候,
也使用 %x方式就可以是 16进制数据了
goodluckyxl 2007-03-19
  • 打赏
  • 举报
回复
任意长的字符串匹配
看看那些游戏公司处理字符串的过程
搜索引擎也有 搜搜看
了解一些原理会有帮助
bo.cui 2007-03-19
  • 打赏
  • 举报
回复
.....
用不上数组~
你可以读一个就马上显示到屏幕~
不缓冲~~

这样无论多大文件都能解决了~

。。。。
natineprince 2007-03-18
  • 打赏
  • 举报
回复
如果ABC.DAT的容量达到2M级...那么要多大的数组才能模式匹配啊?
mochen5460 2007-03-18
  • 打赏
  • 举报
回复
问题二:
怎么查找任意长度的16进制数据?
-------------------------------------
先将16进制数转换成字符串,然后模式匹配就行了
mochen5460 2007-03-18
  • 打赏
  • 举报
回复
问题一:
我应该怎么像UE那样将ABC.DAT读取成16进制类UE32的显示放在数组?
--------------------------------------------------------------
一个字符一个字符的读,用16进制显示不就是了?

69,369

社区成员

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

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