tugouzhishen 2022-10-08 19:53 采纳率: 88.5%
浏览 110
已结题

C语言改代码读取文本文件写入二进制文件

问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>
#include <string.h>
#include <cstdlib>
#include <stdlib.h>
tydef struct _st_wHeader
{
    unsigned char taga;
    unsigned char tagb;
    unsigned char leng;
    unsigned char val[255];
}WHEADER;
int func(WHEADER* p1, WHEADER* p2)
{
    int flag = 0;
    if (p2->leng > p1->leng)
    {
        flag = 1;
    }
    else if (p2->taga > p1->taga && p2->leng == p2->leng)
    {
        flag = 1;
    }
    else if (p2->tagb > p1->tagb && p2->taga == p1->taga && p2->leng == p2->leng)
    {
        flag = 1;
    }
}
void change(WHEADER* p1, WHEADER* p2)
{
    if (flag == 1)
    {
        WHEADER temp = *p2;
        *p2 = *p1;
        *p1 = temp;
    }
}
int main()
{
    WHEADER* pWhe = NULL;
    WHEADER temp;
    WHEADER* p1;
    WHEADER* p2;                             
    WHEADER* p0;
    int 0;
    FILE* rp = fopen("wenjian.dat");
    if (rp == 0)
    {
        printf("error\n");
        return 0;
    }
    FILE* wp = fopen("wenjian.txt");
    if (wp == 0)
    {
        printf("error\n");
        return 0;
    }
    WHEADER r;
    while (!feof(rp))
    {
        if (fread(&r, 3, 1, rp) > 0)
        {
            fseek(rp, r.leng, SEEK_CUR);
            n++;
        }
    }
    p0 = (WHJEADER*)malloc(sizeof(WHEADER) * n);
    pWhe = p0;
    memset(pwHe, 0, sizeof(WHEADER) * n);
    fseek(rp, 0, SEEK_SET);
    while (!feof(rp))
    {
        fread(pwHe, 3, 1, rp);
        fread(pwHe->val, pwHe->leng, 1, rp);
        pwHE++;
    }
    fclose(rp);
    for (p1 = p0; p1 - p0 < n - 1; ++p1)
    {
        for (p2 = p1 + 1; p2 - p0 < n; ++p2)
        {
            if (func(p2, p1))
            {
                change(p2, p1);
            }
        }
    }
    int no = 0;
    for (p1 = p0; p1 - p0 < n; ++p, no++)
    {
        if (p1->leng == 0)
        {
            fprintf(wp, "no:%02d\n tag:%02x %02x\n leng:%d\n", no, p1->taga, p1->tagb, p1->leng);
        }
        else
        {
            fprintf(wp, "no:%02d\n tag:%02x %02x\n leng:%d\n", no, p1->taga, p1->tagb, p1->leng);
            int i;
            fprintf(wp, "val: ");
            for (i = 0 : i < p1->leng; i++)
            {
                fprintf(wp, "%02x "p1->val[i]);
                if (i == p->leng - 1)
                {
                    fprintf(wp, "\n");
                }
            }
        }

    }
    fclose(wp);
    free(p0);
    return 0;
}

我想要达到的结果

这个是一个读取二进制文件写入文本文件的现在想改成读取读取文本文件写入二进制文件怎么改写的部分把fprintf改成fwrite,读的部分目前没有思路求各位帮忙解答一下,谢谢了

  • 写回答

4条回答 默认 最新

  • _GX_ 2022-10-08 23:23
    关注

    下面程序是读入你输出的文本文件,写入相应的二进制文件

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct _st_wHeader {
      unsigned char taga;
      unsigned char tagb;
      unsigned char leng;
      unsigned char val[255];
    } WHEADER;
    
    int read(FILE *file, WHEADER *r) {
      int no;
      if (fscanf(file, " no:%d", &no) != 1)
        return 0;
      int taga, tagb;
      if (fscanf(file, " tag:%x%x", &taga, &tagb) != 2)
        return 0;
      r->taga = taga;
      r->tagb = tagb;
      int leng;
      if (fscanf(file, " leng:%d", &leng) != 1)
        return 0;
      r->leng = leng;
      if (r->leng > 0) {
        for (int i = 0; i < r->leng; i++) {
          int val;
          fscanf(file, "%x", &val);
          r->val[i] = val;
        }
      }
      return 1;
    }
    
    int main() {
      const char *in_filename = "wenjian.txt";
      const char *out_filename = "wenjia.dat";
    
      FILE *in_file = fopen(in_filename, "r");
      if (!in_file) {
        printf("failed to open %s\n", in_filename);
        return 1;
      }
    
      FILE *out_file = fopen(out_filename, "wb");
      if (!out_file) {
        printf("failed to open %s\n", out_filename);
        fclose(in_file);
        return 2;
      }
    
      WHEADER r;
      while (read(in_file, &r))
        fwrite(&r, sizeof(WHEADER), 1, out_file);
    
      fclose(in_file);
      fclose(out_file);
    
      return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 10月18日
  • 已采纳回答 10月10日
  • 修改了问题 10月8日
  • 创建了问题 10月8日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改