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 Qt4代码实现下面的界面
  • ¥15 prism提示我reinstall prism 如何解决
  • ¥15 asp.core 权限控制怎么做,需要控制到每个方法
  • ¥20 while循环中OLED显示中断中的数据不正确
  • ¥15 这个视频里的stm32f4代码是怎么写的
  • ¥15 JNA调用DLL报堆栈溢出错误(0xC00000FD)
  • ¥15 请教SGeMs软件的使用
  • ¥15 自己用vb.net编写了一个dll文件,如何只给授权的用户使用这个dll文件进行打包编译,未授权用户不能进行打包编译操作?
  • ¥50 深度学习运行代码直接中断
  • ¥20 需要完整的共散射点成像代码