Search code examples
cloadersystems-programming

Storing a hexadecimal number in an int


Trying to implementation of an absolute loader with input from : http://pastebin.com/k7VkA3xQ

Output currently obtained : http://pastebin.com/FiYPMWrZ

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
#include <string.h>


int dec(char hex[]){ //function converts a hex array of characters to its equivalent decimal value

int length,i,sum=0;
for(length=0;hex[length]!='\0';length++);

for (i = 0;hex[i]!='\0'; ++i,--length)
{
    if (hex[i]>='0' && hex[i]<='9') 
        sum+=(hex[i]-'0')*pow(16,length-1);
    else if (hex[i]>='A' && hex[i]<='Z')    
        sum+=hex[i]-'A'+10;
    else if (hex[i]>='a' && hex[i]<='z')    
        sum+=hex[i]-'a'+10;
}
return sum;
}


int main(int argc, char const *argv[])
{
char record[2],progname[10],startaddr[10],proglen[10],addr[10],len[10];
int start,address,diff,flag=1,decimal;
FILE *fptr;

if (access("Input.dat",F_OK)!=-1)
{
    fptr = fopen("Input.dat","r");
    printf("File opened successfully\n");
}
else
{
    printf("File opened unsuccessfully\n");
    exit(1);
}


fscanf(fptr,"%s",record);
if (strcmp(record,"H")==0){
    fscanf(fptr,"%s",progname);fscanf(fptr,"%s",startaddr);fscanf(fptr,"%s",proglen);
}

fscanf(fptr,"%s",record);
while(strcmp(record,"T") == 0 ){
    fscanf(fptr,"%s",addr);fscanf(fptr,"%s",len);
    if (flag)
        sscanf(startaddr,"%x",&start);
    else
        start = address; //'start' fails to store the hex value of 'address'

    sscanf(addr,"%x",&address);
    diff = address - start;
        while((diff--)>0){
            printf("%x              xx\n",start++);
    }
    decimal = dec(len)%3==0?dec(len)/3:dec(len)/3+dec(len)%3;
    while(decimal--){
        fscanf(fptr,"%s",addr);
        printf("%x              ",address++);   printf("%c%c\n",addr[0],addr[1]);   
        printf("%x              ",address++);   printf("%c%c\n",addr[2],addr[3]);   
        printf("%x              ",address++);   printf("%c%c\n",addr[4],addr[5]);   
    }
        fscanf(fptr,"%s",record);
}


return 0;
}

Not sure of how to make 'start' store the value of 'address'...at present..'start' prints from 1000H ... kindly help me in storing the hexadecimal value 'address' in the int 'start'...input and output files for the above implementation have been attached above...thx!


Solution

  • if the hexadecimal number is stored in a string hex with the form 0x... or 0X... or ... where points are representing digits in 16 base then you can use the sscanf() function to store the value in an integer number (decimalNumber for the example below) in 10 base

    sscanf(hex,"%x",&decimalNumber);
    

    So for a complete example

    char hex[100]="0xf";
    int decimalNumber;
    sscanf(hex,"%x",&decimalNumber);
    printf("The value of decimalNumber is %d\n",decimalNumber);
    

    the output will be

    The value of decimalNumber is 15