打印
[AVR单片机]

C数据保存问题

[复制链接]
2763|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hunter008|  楼主 | 2007-11-28 11:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序:
#include "graphics.h"
#include "stdio.h"
#include "fcntl.h"
#include "io.h"
#include "stdlib.h"
#include "conio.h"
main()
{    unsigned char c,b;
        int d=32;
    FILE *p1,*p2;
    p1=fopen("HZK16","rb");
    p2=fopen("new0.txt","wb");
    fseek(p1,129216,0);
    while(d)
    {d--;
    c=getc(p1);
    b=printf("%x",c);
    putc(b,p2);
    }
    fclose(p1);
    fclose(p2);}
从hzk16读出的数据是对的,数据为84084084010401248327c53c89e481248126812501240124212211fe100
为什么保存倒new0.txt文件的 时候就变成乱码了,而不是上面的数据?
还有读出的数据比如说:08,为什么系统把0给省去了,而变成8了,怎么能让他保留前面的0?????
程序那个地方错了吗 ?请各位大侠帮帮忙,指出来???

相关帖子

沙发
yuzhuen| | 2007-11-28 13:07 | 只看该作者

查一下C的文件操作函数,试一下用文本方式打开

不要用二进制方式打开.试一下将
p2=fopen("new0.txt","wb");
改为
p2=fopen("new0.txt","w");

使用特权

评论回复
板凳
农民讲习所| | 2007-11-28 13:19 | 只看该作者

fread,fwrite

使用特权

评论回复
地板
hunter008|  楼主 | 2007-11-28 14:20 | 只看该作者

上面的方法都试过了 ,,以失败而告终

上面的方法都试过了 ,,以失败而告终

使用特权

评论回复
5
aweyfan| | 2007-11-28 14:30 | 只看该作者

printf("%02x",c);

使用特权

评论回复
6
农民讲习所| | 2007-11-28 17:12 | 只看该作者

b=printf("%x",c);putc(b,p2);不对

b=printf("%x",c); 
    putc(b,p2);

unsigned char b[6];
printf -> sprintf( &b[0].....
结果为字符串数据。写文件写"0x80,"大概5字节。 

使用特权

评论回复
7
沈老| | 2007-11-28 19:37 | 只看该作者

在VC下

int main()
{    
    unsigned char c;
    char b[6];//"08 "+0 !!!!
    int d=32;
    FILE *p1,*p2;
    p1=fopen("HZK16","rb");
    p2=fopen("new0.txt","wb");
    fseek(p1,129216,0);
    while(d)
    {
    d--;
    c=getc(p1);
    sprintf(b,"%02x ",c);
    fwrite(b,sizeof(char),strlen(b),p2);//not putc() !!!
    }
    fclose(p1);
    fclose(p2);
    return 0;
}

使用特权

评论回复
8
mohanwei| | 2007-11-28 20:04 | 只看该作者

“b=printf("%x",c)”??

应该是b=sprintf("%x",c)吧?
printf和sprintf差别是:前者打印到输出流,后者打印到字符缓冲区

想要让输出的十六进制字符串对齐,需要补0:
b=sprintf("%02bX",c);

其中X表示大写十六进制,b表示打印的是单个字符,02表示长度最少为2——不足则前面补零

使用特权

评论回复
9
yuzhuen| | 2007-11-29 00:20 | 只看该作者

在VC60下试了一下,确定这个函数是行得通的

情况1:

outfp=fopen("aa.txt","w");

fprintf(outfp,"%02x",15);

fclose(outfp);

输出:0F


情况2

outfp=fopen("aa.txt","w");

fprintf(outfp,"%d",15);

fclose(outfp);

输出:15

情况3

outfp=fopen("aa.txt","w");

fprintf(outfp,"%003d",15);

fclose(outfp);

输出:015





使用特权

评论回复
10
hotpower| | 2007-11-29 01:15 | 只看该作者

确实第1次看见b=printf("%x",c);...不解...

使用特权

评论回复
11
hunter008|  楼主 | 2007-12-1 17:49 | 只看该作者

哈哈,,,不用定义.txt的,上面的问题解决了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

11

帖子

0

粉丝