hex to bin converter

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Hi All,
Мне надо такой конвертер, который в пустые места (не прописанные в hex-файле)
заполнял единицами. А то у меня конвертер который заполняет нулями и потом
сложно подсчитывать контрольную сумму. У кого такой есть поскажите где лежит.
Василий


hex to bin converter
Mon Nov 10 2003 19:35, Vasiliy Zharkov wrote to All:

 VZ> Hi All,
 VZ> Мне надо такой конвертер, который в пустые места (не прописанные в
 VZ> hex-файле) заполнял единицами. А то у меня конвертер который заполняет
 VZ> нулями и потом сложно подсчитывать контрольную сумму. У кого такой есть
 VZ> поскажите где лежит.
 VZ> Василий

http://srecord.sourceforge.net/srecord.html

WBR, Юрий.


hex to bin converter
Hallo Vasiliy!

VZ> Мне надо такой конвертер, который в пустые места (не прописанные в
VZ> hex-файле) заполнял единицами.
Когда-то в детстве писал. Стиль корявый, но работает ;)
Компилялось борландой под OS/2. Под виндой тоже должно скомпиляться.
Под ДОСом - не должно.

#include <stdio.h>
#include <mem.h>
#define DATASIZE 0x10000
#define FILLER   0xff

unsigned char Data[DATASIZE];

int hextobin(char *str,int digits)
{
int rc=0;
while (digits--)
  {
  rc <<= 4;
  if ((*str >= '0') && (*str <= '9'))
    rc |= (*str)-'0';
  else if ((*str >= 'A') && (*str <= 'F'))
    rc |= (*str)-'A'+10;
  else
    return -1;
  str++;
  }
return rc;
}

int main(int argc, char **argv)
{
FILE *fp;
char str[80];
int i,line,crc,size,addr,type,databyte;
if (argc != 3)
  {
  printf ("USAGE: HEX2BIN infile.hex outfile.bin\n");
  return -1;
  }
memset(Data,FILLER,DATASIZE);
fp = fopen(argv[1],"rt");
if (fp == NULL)
  {
  printf ("Unable to open file %s\n",argv[1]);
  return 1;
  }
for (line=1;;line++)
  {
  crc=0;
  str[0] = 0;
  fgets(str,79,fp);
  if (feof(fp))
    break;
  if (str[0] != ':')
    {
    printf ("Error in file %s at line %d\n",argv[1],line);
    return 2;
    }
  size = hextobin(str+1,2);
  addr = hextobin(str+3,4);
  type = hextobin(str+7,2);
  for (i=0;i<size;i++)
    {
    databyte = hextobin(str+9+i*2,2);
    if (databyte==-1)
      break;
    crc+=databyte;
    str[i] = databyte;
    }
  if (databyte!=-1)
    databyte = hextobin(str+9+i*2,2);
  if ((size==-1) || (addr==-1) || (type==-1) || (databyte==-1))
    {
    printf ("Error in file %s at line %d\n",argv[1],line);
    return 3;
    }
  crc+=size;
  crc+=(addr&0xff);
  crc+=(addr>>8);
  crc+=type;
  crc+=databyte;
  if ((crc&0xff) != 0)
    {
    printf ("CRC error in file %s at line %d\n",argv[1],line);
    return 4;
    }
  if (type!=0)
    continue;
  if (size==0)
    continue;
  memcpy(Data+addr,str,size);
  }
fclose(fp);
fp = fopen(argv[2],"wb");
if (fp == NULL)
  {
  printf ("Unable to create file %s\n",argv[2]);
  return 4;
  }
fwrite(Data,1,DATASIZE,fp);
fclose(fp);
return 0;
}

WBR    Slavik A. Komarov

hex to bin converter
       Доброго здоровья, Vasiliy!

10 Nov 03 19:35, Vasiliy Zharkov написал для All:

 VZ> Мне надо такой конвертер, который в пустые места (не прописанные в
 VZ> hex-файле)
 VZ> заполнял единицами. А то у меня конвертер который заполняет нулями и потом
 VZ> сложно подсчитывать контрольную сумму. У кого такой есть поскажите где
 VZ> лежит.

  многие линкеры умеют забивать неиспользованную память единицами

    WBR, Сергей.                                     ICQ: 101347299

... Красота требует жертв. И в основном эти жертвы мужья...

hex to bin converter
Привет Vasiliy!

10 Nov 03 19:35, Vasiliy Zharkov писал All:

 VZ> Мне надо такой конвертер, который в пустые места (не прописанные в
 VZ> hex-файле) заполнял единицами.

    man objcopy на предмет --gap-fill.

    Собственно, вот что там написано:

  --gap-fill=val
         Fill gaps between sections with val.  This operation applies to
         the load address (LMA) of the sections.  It is done by
         increasing the size of the section with the lower address, and
         filling in the extra space created with val.

 VZ>  У кого такой есть поскажите где лежит.

    Лежит на www.gnu.org в комплекте binutils.

 VZ>  Василий

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Пирожок вареный с вареньем.

Site Timeline