我一直在努力转换这个。我已经尝试循环遍历数组,将字符转换为long,但这不起作用。我在网上看过简单的例子,但它们没有涵盖更长的char数组的循环过程。我可以使用什么方法将这个char数组(SAMPLE)转换为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 */
};
我的代码
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)));
答案 0 :(得分:2)
man ar
说:
文件成员标头中的所有信息均为可打印ASCII 。该 标题中包含的数字信息存储为十进制 数字(除了八进制的ar_mode)。因此,如果存档 包含可打印文件,存档本身是可打印的。
所以 atol(ar_date)
应该可以解决问题。