Reputation: 235
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
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