2538|6

419

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

printf打印出错 [复制链接]

本帖最后由 woody_chen 于 2016-12-13 23:23 编辑

最近我把芯片里的程序读出来,但是读出来保存成txt文件。txt不方便直接和bin文件比较。我就用C写了个简单的txt转bin的程序。

  1. #include <stdio.h>

  2. int main(int argc,char *argv[])
  3. {
  4.         FILE *txt;
  5.         FILE *bin;

  6.         char out,in;
  7.         char data[2];
  8.         unsigned int i=0;
  9.         unsigned int cnt;
  10.         if(argc != 3)
  11.         {
  12.                 printf("useage: txt2bin file.txt file.bin\n");
  13.                 return -1;
  14.         }

  15.         txt = fopen(argv[1],"r");
  16.         if(!txt)
  17.         {
  18.                 printf("%s cannot be open!\n",argv[1]);
  19.                 return -1;
  20.         }

  21.         bin = fopen(argv[2],"wb");
  22.         if(!bin)
  23.         {
  24.                 printf("could not create the binary file: %s\n",argv[2]);
  25.                 return -1;
  26.         }

  27.         while(1)
  28.         {
  29.                 out = fgetc(txt);

  30.                 if(out == EOF)
  31.                 {
  32.                         if(i==1)
  33.                         {
  34.                                 fputc(data[0],bin);
  35.                                 cnt++;
  36.                         }
  37.                         break;
  38.                 }
  39.                 else if(out == ' ' || out == '\n' || out == '\r')
  40.                 {
  41.                         continue;
  42.                 }
  43.                 else if(out>='0' && out<='9')
  44.                 {
  45.                         out = out -'0';
  46.                 }
  47.                 else if(out>='a' && out<='f')
  48.                 {
  49.                         out = out -'a' + 10;
  50.                 }
  51.                 else if(out>='A' && out<='F')
  52.                 {
  53.                         out = out -'A' + 10;
  54.                 }
  55.                 else
  56.                 {
  57.                         printf("the txt file contains non-binary character!\n");
  58.                         fclose(bin);
  59.                         fclose(txt);
  60.                         return -1;
  61.                 }

  62.                 data[i] = out;
  63.                 i++;
  64.                 if(i == 2)
  65.                 {
  66.                         i = 0;
  67.                         in = (data[0]<<4) + data[1];
  68.                         fputc(in,bin);
  69.                         cnt++;
  70.                 }
  71.         }

  72.         fclose(bin);
  73.         fclose(txt);

  74.         printf("convert success!\n");
  75.         printf("totally %d bytes!\n",cnt);
  76.         return 0;
  77. }
复制代码
代码是用VC6.0编译的。转换出来的bin文件是正确的,但是打印出的bin文件长度却不对。

我把程序拿到ubuntu,用GCC编译执行。转换出的bin文件也是对的,打印出的长度也不对,而且跟windows下不一样。

不知道为什么请大侠指点。

执行结果.jpg (17.27 KB, 下载次数: 0)

执行结果.jpg

bin文件.jpg (46.79 KB, 下载次数: 0)

bin文件.jpg

ubuntu bin文件.jpg (8.97 KB, 下载次数: 0)

ubuntu bin文件.jpg

ubuntu 结果.jpg (10.33 KB, 下载次数: 0)

ubuntu 结果.jpg
此帖出自单片机论坛

最新回复

哈哈,cnt没有初始化……  详情 回复 发表于 2016-12-14 08:47
点赞 关注
 

回复
举报

828

帖子

8

TA的资源

一粒金砂(高级)

沙发
 
有意思,怎么读出来法,详细谈来,咱家也研究研究
此帖出自单片机论坛

点评

就是用编程器读出来的。  详情 回复 发表于 2016-12-13 23:25
 
个人签名人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/
 

回复

419

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
wugx 发表于 2016-12-13 23:23
有意思,怎么读出来法,详细谈来,咱家也研究研究

就是用编程器读出来的。
此帖出自单片机论坛
 
 
 

回复

6040

帖子

205

TA的资源

版主

4
 
楼主你的程序最牛逼之处就是cnt没有赋初值
还有其他一些小问题,像fgetc的结果怎么能赋给char型变量呢,应该是int才符合规则
此帖出自单片机论坛

点评

谢谢提醒。 1. 果然赋了初值就好了。我有点不解,不赋初值的话默认不就是0吗? 2. fgetc看字面意思就是get char,理所当然了。  详情 回复 发表于 2016-12-14 09:07
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(中级)

5
 
哈哈,cnt没有初始化……
此帖出自单片机论坛
 
 
 

回复

419

帖子

0

TA的资源

一粒金砂(高级)

6
 
lcofjp 发表于 2016-12-13 23:49
楼主你的程序最牛逼之处就是cnt没有赋初值
还有其他一些小问题,像fgetc的结果怎么能赋给char型变量呢,应 ...

谢谢提醒。
1. 果然赋了初值就好了。我有点不解,不赋初值的话默认不就是0吗?
2. fgetc看字面意思就是get char,理所当然了。
此帖出自单片机论坛
 
 
 

回复

419

帖子

0

TA的资源

一粒金砂(高级)

7
 
又学到了新知识:
在C语言中的全局变量和静态变量都是会自动初始化为0,堆和栈中的局部变量不会初始化而拥有不可预测的值。
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表