⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hex2dual.c

📁 这是用C语言编写的关于8051的VHDL的源代码
💻 C
字号:
/*****************************************************************************//* Program : hex2dual                                                        *//*                                                                           *//* Author :  Roland H鰈ler                                                   *//* Date :    23.08.2001                                                      *//* Purpose:  Convert Intel HEX files to binary notation text files.          *//*****************************************************************************/#include <sys/stat.h>    #include <stdlib.h>    #include <limits.h>    #include <time.h>    #include <sys/types.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <errno.h>  #define LINE_LENGTH 128#define FILE_EXT ".dua"static char *cmnd;FILE *fpr;FILE *fpw; /*---------------------------------------------------------------------------*//*  Function : error_exit                                                    *//*                                                                           *//*  Purpose :  Print error message, close files, and exit                    *//*             program with exit code EXIT_FAILURE.                          *//*  Input :    Message text                                                  *//*---------------------------------------------------------------------------*/void error_exit (char *msg) {   (void) fprintf (stderr, "%s: %s: %s\n", cmnd, msg, strerror(errno)); /*   (void) fclose(fpr); *//*   (void) fclose(fpw); */  (void) fflush(stdout);  exit (EXIT_FAILURE); }/*---------------------------------------------------------------------------*//*  Function : hex2bin                                                       *//*                                                                           *//*  Purpose :  Convert a hexadecimal character in its binary representation  *//*  Input :    Hexadecimal character                                         *//*---------------------------------------------------------------------------*/char *hex2bin (char hexval){  /* Default is new line */  static char bnibble[5] = "----\0";  /* Convert hexadecimal character */  if (hexval == '0') (void)strcpy(bnibble,"0000");  if (hexval == '1') (void)strcpy(bnibble,"0001");  if (hexval == '2') (void)strcpy(bnibble,"0010");  if (hexval == '3') (void)strcpy(bnibble,"0011");  if (hexval == '4') (void)strcpy(bnibble,"0100");  if (hexval == '5') (void)strcpy(bnibble,"0101");  if (hexval == '6') (void)strcpy(bnibble,"0110");  if (hexval == '7') (void)strcpy(bnibble,"0111");  if (hexval == '8') (void)strcpy(bnibble,"1000");  if (hexval == '9') (void)strcpy(bnibble,"1001");  if ((hexval == 'A') || (hexval == 'a')) (void)strcpy(bnibble,"1010");  if ((hexval == 'B') || (hexval == 'b')) (void)strcpy(bnibble,"1011");  if ((hexval == 'C') || (hexval == 'c')) (void)strcpy(bnibble,"1100");  if ((hexval == 'D') || (hexval == 'd')) (void)strcpy(bnibble,"1101");  if ((hexval == 'E') || (hexval == 'e')) (void)strcpy(bnibble,"1110");  if ((hexval == 'F') || (hexval == 'f')) (void)strcpy(bnibble,"1111");  return (bnibble);}  /*---------------------------------------------------------------------------*//*  Function : hex2int                                                       *//*                                                                           *//*  Purpose :  Convert a hexadecimal character in its integer representation *//*  Input :    Hexadecimal character                                         *//*---------------------------------------------------------------------------*/int hex2int (char hexval){  /* Default */  int inibble = 17;  /* Convert hexadecimal character */  if (hexval == '0') inibble = 0;  if (hexval == '1') inibble = 1;  if (hexval == '2') inibble = 2;  if (hexval == '3') inibble = 3;  if (hexval == '4') inibble = 4;  if (hexval == '5') inibble = 5;  if (hexval == '6') inibble = 6;  if (hexval == '7') inibble = 7;  if (hexval == '8') inibble = 8;  if (hexval == '9') inibble = 9;  if ((hexval == 'A') || (hexval == 'a')) inibble = 10;  if ((hexval == 'B') || (hexval == 'b')) inibble = 11;  if ((hexval == 'C') || (hexval == 'c')) inibble = 12;  if ((hexval == 'D') || (hexval == 'd')) inibble = 13;  if ((hexval == 'E') || (hexval == 'e')) inibble = 14;  if ((hexval == 'F') || (hexval == 'f')) inibble = 15;  return (inibble);}  /*****************************************************************************//*                                                                           *//*                               MAIN PROGRAM                                *//*                                                                           *//*****************************************************************************/int main (int argc, char **argv) {   char line[LINE_LENGTH];  char nline[LINE_LENGTH*4];  char *fwname;  int nmbr = 0;  int n = 0;   nline[0] = '\0';  cmnd = argv[0];  /* Check options and count them */  if (argc != 2)    error_exit ("Usage: hex2bin <filename>");  /* Build file name for new file */   fwname = (char*)malloc(sizeof(argv[2]) + 1);  if (fwname == NULL)    error_exit ("Not enough memory");  fwname[0] = 0;  (void)strcpy(fwname,argv[1]);  (void)strcpy(fwname + strlen(fwname) - 4,FILE_EXT);  fprintf(stderr,"fwname = %s\n",fwname);  /* Open file */  if ((fpr = fopen (argv[1],"r")) == NULL)    error_exit ("Cannot open input file!");  /* Create file */  if ((fpw = fopen (fwname,"w")) == NULL)    error_exit ("Cannot create output file!");  /* Write converted file */  while (fgets (line, sizeof(line), fpr) != NULL && strncmp(line,":00000001FF",11) != 0)    {      n = 1;      nmbr = hex2int(line[n]);      n++;      nmbr = nmbr*16 + hex2int(line[n]);      n++;      n++;      n++;      for ( n = 5; n < nmbr+5; n++)      {        (void)strcpy(nline,hex2bin(line[2*n-1]));        (void)strcpy(nline + 4,hex2bin(line[2*n]));        (void)strcpy(nline + 8 ,"\n");        fputs (nline,fpw);        nline[0] = '\0';      }    }  (void) fclose(fpr);  (void) fclose(fpw);    if (fflush(stdout) == EOF)    error_exit ("Standard output flush error!");  return (0);}      

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -