开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 952|回复: 2
收起左侧

[精币悬赏] 求助C转易语言,谢谢

[复制链接]
结帖率:82% (9/11)
发表于 2020-3-30 20:47:22 | 显示全部楼层 |阅读模式   河北省秦皇岛市
10精币
  1. /*
  2. * =====================================================================================
  3. *
  4. *       Filename:  unpack.c
  5. *
  6. *    Description:  仅作为代码分享,转载请注明作者
  7. *          (相对于把整大块文件读入内存,此程序运行时对系统开销比较小的特点);
  8. *
  9. *        Version:  1.0
  10. *        Created:  2013年03月28日 22时34分52秒
  11. *       Revision:  none
  12. *       Compiler:  gcc
  13. *
  14. *         Author:  linkscue (scue),
  15. *   Organization:  
  16. *
  17. * =====================================================================================
  18. */



  19. #include    <stdlib.h>
  20. #include    <stdio.h>
  21. #include    <strings.h>
  22. #define u8 unsigned char
  23. #define u32 unsigned int
  24. #define u16 unsigned short
  25. #define BUFFER_SIZE 4

  26. /*
  27. * u32  magic
  28. * u32  paket_size
  29. * u32  flag=0x1
  30. * u8   Hardware[8]
  31. * u32  Filetype
  32. * u32  data_size
  33. * u8   date[16]
  34. * u8   time[16]
  35. * u8   filename[32]
  36. * u8   other[paket_size-92]
  37. * */

  38. int realStrlen(char *string){
  39.     int i=0;
  40.     char ch=NULL;
  41.     while ( (ch = *(string + i)) != '\xFF' ) {
  42.         i++;
  43.     }
  44.     return i;
  45. }
  46. void hello(){
  47.     printf("\n");
  48.     printf("Welcome to use linkscue unpack huawei official rom tool!\n");
  49. }
  50. int main ( int argc, char *argv[] )
  51. {
  52.     hello();
  53.     if (argc == 1) {
  54.         printf("\n");
  55.         printf("usage: %s unpack.app\n", argv[0]);
  56.         exit(0);
  57.     }
  58.     char *file;
  59.     FILE *fp,*fd;
  60.     u32 tmp;
  61.     u32 magic=0xa55aaa55;
  62.     u32 paket_size=0;
  63.     u32 flag=1;
  64.     u8  hwid[8]="";
  65.     u32 filetype=0;
  66.     u32 data_size=0;
  67.     u8  date[16]="";
  68.     u8  time[16]="";
  69.     u8  filename[32]="";
  70.     int other_size=0;
  71.     int number=1;
  72.     char basename[32]="";
  73.     char basehwid[8]="";
  74.     int fp_start=0;
  75.     int fp_local=0;
  76.     int i=0,count=0,counts=0;
  77.     int end_point=0;
  78.     file=argv[1];
  79.     if ( (fp=fopen(file,"rb")) == NULL) {
  80.         printf("open file failure!\n",file);
  81.         exit(1);
  82.     }
  83.     printf("\n");
  84.     while (!feof(fp)) {
  85.         fscanf(fp, "%4c", &tmp);
  86.         if (tmp == magic) {
  87.             fp_start=(ftell(fp)-4);
  88.             fscanf(fp, "%4c",&paket_size);
  89.             fscanf(fp, "%4c",&flag);
  90.             fscanf(fp, "%8c",&hwid);
  91.             fscanf(fp, "%4c",&filetype);
  92.             fscanf(fp, "%4c",&data_size);
  93.             fscanf(fp, "%16c",&date);
  94.             fscanf(fp, "%16c",&time);
  95.             fscanf(fp, "%32c",&filename);
  96.             other_size=( paket_size - 92 );
  97.             fseek(fp, other_size, SEEK_CUR);
  98.             if ( strcmp(filename,"INPUT") == 0 ) {
  99.                 sprintf(basename, "output_%02d.img", number);
  100.                 strncpy(filename, basename, sizeof(filename));
  101.                 number++;
  102.             }
  103. //            if ( (int)paket_size <= 0 || (int)data_size <= 0) {
  104. //                continue;
  105. //            }
  106.             strncpy(basehwid, hwid , realStrlen(hwid));
  107.             printf("At: 0x%08x hw: %s size: %-10d time: %s_%s -->  %s\n", fp_start, basehwid, data_size, date, time, filename);
  108.             if ((fd=fopen(filename,"wb"))==NULL) {
  109.                 printf("open %s to write data failure!\n", filename);
  110.                 fseek(fp, 88, SEEK_CUR);
  111.                 continue;
  112.             }
  113.             u8 buffer[BUFFER_SIZE];
  114.             counts = 0;
  115.             while ( counts < data_size ){
  116.                 if (feof(fp)) {                 /* if the file is end, break! */
  117.                     break;
  118.                 }
  119.                 count = fread(buffer, 1, BUFFER_SIZE, fp);
  120.                 fwrite(buffer, 1 , BUFFER_SIZE, fd);
  121.                 counts+=count;
  122.             }
  123. //            printf("paket size is 0x%08x, count is %d,  data start at 0x%08x, this time end at 0x%08x\n", paket_size,counts,  (paket_size+fp_start), ftell(fp));
  124.             fclose(fd);
  125.             fseek(fp, ( fp_start + 92 ) , SEEK_SET);
  126.         }
  127.     }
  128. //    printf("Unpack %s ok!\n", file);
  129.     fclose(fp);
  130.     return EXIT_SUCCESS;
复制代码


求助能帮忙转换成易语言源码!!!

结帖率:20% (1/5)
发表于 2021-7-12 11:19:18 | 显示全部楼层   江苏省苏州市
没有结果吗
回复

使用道具 举报

结帖率:20% (1/5)
发表于 2021-7-12 11:20:22 | 显示全部楼层   江苏省苏州市
我也想知道结果
回复

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表