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

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日

悬赏问题

  • ¥15 PPOCRLabel
  • ¥15 网友们我该怎么办啊,急
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 目标跟踪,计算机视觉
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡