写的计算二进制文件的checksum程序有问题,求助

kingoflower 2019-12-24 03:54:46
int main(int argc,char *argv[])
{
unsigned int cksum=0;
FILE *fp;
char ch;

if (!(fp=fopen("f:\\test1.rom","rb")))
{
printf("Error in open file!\n");
return 1;
}
ch = fgetc(fp);
while(ch!=EOF)
{
cksum += ch;
ch = fgetc(fp);
printf("%x ", cksum);
}
printf("checkSum: %x\n", cksum);
fclose(fp);

return 0;
}
下面是二进制文件:


下面是程序输出:
ffffffa0 ffffffa0 ffffffa0 ffffffb2 fffffff2 32 72 a2 d2 132 199 19b 20e 280 2f2 362 394 3c8 402 436 466 466 4c9 4c9 538 538 5a6 5a6 60c 60c 675 675 6dc 6dc 67c 67c 67c 690 6af 6cf 6d2 6a7 6a7 70d 72c 79c 79f 7a2 7a3 7a3 7aa 7aa 7b1 7b1 7c2 7c2 7c2 7a1 780 75f 73c 711 741 771 7b2 7df 826 86b 8b9 8fe 950 999 9dc 9dc 9fc 983 97f 98a 9ea 973 96f 97a 97a 97a 97a 96a 96a 96a 96a 96a 96a 97a 97a 9a2 9a2 9a2 9a2 9a2 9a2 9a2 9a2 9a2 9a2 9a2 9a2 9a2 9a2 964 965 965 965 965 965 965 965 965 96d 97a 97a 97a 97a 97a 97a 97a 982 982 982 982 982 982 9df 9b7 994 a08 a71 aee b11 ae1 b01 b01 b21 b21 b41 b41 b61 b61 b81 b08 b04 b0f b6f af8 af4 aff a97 a24 a20 a2b a0b 998 994 99f 9f2 a57 ad5 b4b b30 ba2 ba2 ba2 bc2 bc2 be2 be2 c02 c02 c22 c22 c42 bc9 bc5 bd0 c30 bb9 bb5 bc0 b58 ae5 ae1 aec acc a59 a55 a60 a0a 9f2 9d3 9c1 a28 9d6 a3b aa4 b10 b75 bde bde bde bde bde bde bfe b85 b81 b8c bec b75 b71 b7c b14 aa1 a9d aa8 a88 a15 a11 a1c a4e a2e a5f a48 a77 aa8 ae6 b15 b53 b8a baa bdb c11 c4b checkSum: c4b
请按任意键继续. . .

程序想要的结果是A0+0+0+12+...+3a ,cksum取低2 byte,应该怎么改?
...全文
124 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
kingoflower 2019-12-24
  • 打赏
  • 举报
回复
搞定了 int main(int argc,char *argv[]) { unsigned int cksum=0; FILE *fp; char ch; if (!(fp=fopen("f:\\test1.rom","rb"))) { printf("Error in open file!\n"); return 1; } ch = fgetc(fp); while(!feof(fp)) { cksum += ch&0xff; ch = fgetc(fp); // printf("%x ", cksum); } printf("checkSum: %x\n", cksum); fclose(fp); return 0; }
kingoflower 2019-12-24
  • 打赏
  • 举报
回复
这个二进制文件碰到中间有0xFF怎么处理? 而且文件长度不定 读到0xFF就认为是文件EOF了
kuangbao9 2019-12-24
  • 打赏
  • 举报
回复
取出每行,然后再取出:和;之间的字符串,遍历,每两个字符合为一个字符串,将此字符串转换为十六进制,以此类推,将每个十六进制相加,

69,373

社区成员

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

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