2014-12-10 5 views
1

Привет Я пытаюсь сделать getTime() функцию, которая возвращает uint16_t в C.GetTime() функция, которая возвращает значение uint16_t в C

я могу успешно получить массив символов теперь

Вот мой код для вывода массива символов.

Say сегодня Dec 9 2014 выход будет 091214

Так как я могу сделать выводить uint16_t типа?

В этом случае я могу сохранить "0" в 091214, если это тип uint16_t?

char *getT(){ 
struct tm *tm; 
time_t t; 
static char str_date[10]; 

t = time(NULL); 
tm = localtime(&t); 

strftime(str_date, sizeof(str_date), "%d%m%y", tm); 
return str_date;} 

и есть другой подход, который я изменил из кода, который я нашел он-лайн.

это один возвращает сумму 9+12+14 ....

uint16_t getD(){ 
struct tm *tm_time; 
time_t ti; 
//const time_t create_time; 
uint16_t t, d; 
ti = time(NULL); 
tm_time = localtime(&ti); 
t = (tm_time->tm_sec >> 1) + (tm_time->tm_min << 5) + (tm_time->tm_hour << 11); 
d = (tm_time->tm_mday>>1) + ((tm_time->tm_mon+1) << 5) + ((tm_time->tm_year-80) << 9); 
printf("%d %d %d %d \n",d,tm_time->tm_mday>>1,tm_time->tm_mon<<5,(tm_time->tm_year-80)<<9); 
return d;} 
+0

Можете ли вы объяснить, что вам это нужно и как вы планируете его использовать? Похоже, что это может быть проблема XY. –

+0

Итак, это часть моего задания, которое должно получить отметку времени для файла. И как инструктор, определенный в файле 'struct',' creation_time' является 'uint16_t'. Мой план - 'entry.creation_time = getTime(); 'Вот почему я хочу, чтобы возвращаемое значение getTime() было uint16_t. Благодарю. – Shanji

+2

Биты 0-4: День месяца, действительный диапазон значений 1-31 включительно. Биты 5-8: Месяц года, 1 = январь, допустимый диапазон значений 1-12 включительно. Биты 9-15: количество лет с 1980 года, допустимый диапазон значений 0- = включительно 127 (1980-2107). и это требование для отметки времени. Надеюсь, я не получил uint16_t неправильно ... – Shanji

ответ

0
uint16_t getD() { 
    time_t ti; 
    ti = time(NULL); 
    struct tm tm_time; 
    tm_time = *localtime(&ti); 

    //const time_t create_time; 
    uint16_t t, d; 
    d = tm_time.tm_mday 
     + (tm_time.tm_mon + 1) * 32 
     + (tm_time.tm_year - (1980-1900)) * 512; 

    // Print ddmmyy 
    printf("%02d%02d%02d\n", 
     (int) d%32, (int) (d/32)%16, (int) ((d/512)%128 + (1980-1900))%100); 
    return d; 
} 
+0

Спасибо за помощь, что код работает. Только одно, что мне нужно знать. Он вернул распечатку 17801, но фактически представляет 091214 в uin16_t. Правильно ли это понять? – Shanji

+0

@Shanji Да '17801 (основание 10)' -> '100010110001001 base 2' ->' 100010 1100 01001 base 2' -> '34 12 9 (base 10)' -> 2014 9 декабря. – chux

Смежные вопросы