1 #include <time.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int main(void) 6 { 7 struct tm *local; 8 time_t t; 9 t=time(NULL); 10 local=localtime(&t); 11 printf("Local hour is: %02x\n",local->tm_hour); 12 printf("Local month is: %02x\n",local->tm_mon); 13 printf("Local wday is: %02x\n",local->tm_wday); 14 printf("Local year is: %d\n",local->tm_year); 15 //local=gmtime(&t); 16 //printf("UTC hour is: %d\n",local->tm_hour); 17 18 19 printf(asctime(local)); 20 21 unsigned char tmpbuf[8]; // 如果char 類型,2017輸出結果則爲ffffffe1 07 22 memset(tmpbuf,0,sizeof(tmpbuf)); 23 24 local->tm_year = local->tm_year + 1900; 25 26 printf("Print the current year is %d \n",local->tm_year); 27 28 unsigned char year[2];// 如果char 類型,2017輸出結果則爲ffffffe1 07
29 memset(year,0,sizeof(year));
30 memcpy(year,&local->tm_year,2); //將佔4個byte的int型轉化成兩個byte的char類型輸出;
printf("Print the year %02x %02x %02x %02x \n",year[0],year[1],year[0],year[1]);
sprintf(tmpbuf,"%c%c%c%c%c%c%c%c",year[0],year[1],local->tm_mon,local->tm_mday,
local->tm_hour,local->tm_min,local->tm_sec,local->tm_wday);
int i =0;
for(i = 0;i < 8;i++)
{
printf("%02x ",tmpbuf[i]);
}
return 0;
}
在標準C/C++中,咱們可經過tm結構來得到日期和時間,tm結構在time.h中的定義以下:
#ifndef _TM_DEFINED
struct tm {
int tm_sec; /* 秒 – 取值區間爲[0,59] */
int tm_min; /* 分 - 取值區間爲[0,59] */
int tm_hour; /* 時 - 取值區間爲[0,23] */
int tm_mday; /* 一個月中的日期 - 取值區間爲[1,31] */
int tm_mon; /* 月份(從一月開始,0表明一月) - 取值區間爲[0,11] */
int tm_year; /* 年份,其值等於實際年份減去1900 */
int tm_wday; /* 星期 – 取值區間爲[0,6],其中0表明星期天,1表明星期一,以此類推 */
int tm_yday; /* 從每一年的1月1日開始的天數 – 取值區間爲[0,365],其中0表明1月1日,1表明1月2日,以此類推 */
int tm_isdst; /* 夏令時標識符,實行夏令時的時候,tm_isdst爲正。不實行夏令時的進候,tm_isdst爲0;不瞭解狀況時,tm_isdst()爲負。*/
};
#define _TM_DEFINED
#endif 網絡
gcc test.c -o testspa
./test執行後,結果:code
debian:/home/zhangling# ./test
Local hour is: 0a
Local month is: 03
Local wday is: 01
Local year is: 117
Mon Apr 17 10:14:41 2017
Print the current year is 2017
Print the year e1 07 e1 07
e1 07 03 11 0a 0e 29 01blog
但若代碼中,內存
unsigned char tmpbuf[8];// 如果char 類型,2017輸出結果則爲ffffffe1 07
unsigned char year[2];// 如果char 類型,2017輸出結果則爲ffffffe1 07
char和unsigned char的本質區別:【有待繼續加深理解.......................】it
首先在內存中,char與unsigned char沒有什麼不一樣,都是一個字節,惟一的區別是,char的最高位爲符號位,所以char能表示-128~127, unsigned char沒有符號位,所以能表示0~255,這個好理解,8個bit,最多256種狀況,所以不管如何都能表示256個數字。io
在實際使用過程種有什麼區別呢?class
主要是符號位,可是在普通的賦值,讀寫文件和網絡字節流都沒什麼區別,反正就是一個字節,無論最高位是什麼,最終的讀取結果都同樣,只是你怎麼理解最高位而已,在屏幕上面的顯示可能不同。test
可是咱們卻發如今表示byte時,都用unsigned char,這是爲何呢?gcc
首先咱們一般意義上理解,byte沒有什麼符號位之說,更重要的是若是將byte的值賦給int,long等數據類型時,系統會作一些額外的工做。
若是是char,那麼系統認爲最高位是符號位,而int多是16或者32位,那麼會對最高位進行擴展(注意,賦給unsigned int也會擴展)
而若是是unsigned char,那麼不會擴展。
這就是兩者的最大區別。