CS Gamer
CS Gamer

Reputation: 235

How to convert array of char to variable long in C?

I have been trying for hours to convert this. I have tried looping through the array casting the chars to longs, but that wouldn't work. I have seen simple examples online, but they don't cover a looping process for longer char arrays. What is a method I could use to convert this array of char (SAMPLE) to one variable of type long?

ar.h

struct  ar_hdr       /* file member header */
     {
         char    ar_name[16];    /* '/' terminated file member name */
         char    ar_date[12];    /* file member date */
         char    ar_uid[6]       /* file member user identification */
         char    ar_gid[6]       /* file member group identification */
         char    ar_mode[8]      /* file member mode (octal) */
         char    ar_size[10];    /* file member size */
         char    ar_fmag[2];     /* header trailer string */
     };

My code

struct ar_hdr sample;
lseek(fileD, 24, SEEK_SET); //fileD is the file desriptor for the opened archive

//I start at 24 because of the 8 byte magic string for an archive starts the file "!<arch>\n"


int numRead = read(fileD, sample.ar_date, 12);
printf(sample.ar_date);

long epoch = (long *) *sample.ar_date;   //terrible coding here
printf("The current time is: %s\n", asctime(gmtime(&epoch)));

Upvotes: 1

Views: 1996

Answers (1)

TheCodeArtist
TheCodeArtist

Reputation: 22497

man ar says :

All information in the file member headers is in printable ASCII. The numeric information contained in the headers is stored as decimal numbers (except for ar_mode which is in octal). Thus, if the archive contains printable files, the archive itself is printable.

So atol(ar_date) should do the trick.

Upvotes: 2

Related Questions