close


昨天在pa資料,突然想到這玩意其實也可以拿來分享,於是就有了這一篇文章。


第一個是比較簡單的,也是職場上面試很愛考的東西,趴資料,有時候,我們會希望能用一個變數,就將我們想要的資料傳給對方,就會用到這個。

假設,今天是2020/03/03,那麼是不是需要YYYY MM DD 這麼多的變數? 但,我們也可以把20200303變成一整串字串,
我們可以用UINT32的方式來記:

UINT32 date=0x20200303;

這樣可不可以? 當然可以,於是,我們就記起來了;那如何拆開來? 其實這也真的很簡單。


如何輸出  
2,0,2,0,0,3,0,3

首先,我們先了解一下甚麼是UINT32 !
UINT32就是無號整數的32位元,同系列家族的其實還有UINT8,UINT16,UINT64。

而我們可以理解的是
UINT32 date = 0x12345678
=>0x1 | 0x02 | 0x003 | 0x0004 | 0x00005 |0x000006 | 0x0000007 | 0x00000008
這裡要注意的是!!! 0x就是(16進制的意思)!!!

0x00000008 = 1*8        =         8
0x00000070 = 16*7       =       112
0x00000600 = 256*6      =      1536
0x00005000 = 4096*5     =     20480
0x00040000 = 65536*4    =    262144
0x00300000 = 1048576*3  =   3145728
0x02000000 = 16777216*2 =  33554432
0x10000000 = 268435456*1= 268435456

以上,相加起來 = 305419896
/*
想驗證的話,可以直接去跑一下程式,你就UINT32 xxx = 0x12345678;
然後直接看10進制就好,我是因為要教學才一個一個按計算機的啊....!!
*/

好,接下來,我們來寫點code吧 !
 

for (int i = 7; i >= 0; i--)
{
    cout << hex << ((index >> (i * 4)) & 0xf) << endl;
}//1 2 3 4 5 6 7 8

for (int i = 0; i <8 ; i++)
{
    cout << hex << ((index >> (i * 4)) & 0xf) << endl;
}//8 7 6 5 4 3 2 1

 

變化一下(兩個兩個輸出)


for (int i = 3; i >= 0; i--)
{
      cout << hex << ((index >> (i * 8)) & 0xff) << endl;
}//12 34 56 78

 

 

在變化一下(binary的方式)


void print_binary(uint32_t x)
{
	unsigned char *p = (unsigned char *)&x;
	unsigned char byte;

	for (int i = sizeof(uint32_t) - 1; i >= 0; i--) 
	{
		for (int j = 7; j >= 0; j--) 
		{
			byte = (p[i] >> j) & 1;
			printf("%u", byte);
			if (0 == (j % 4))
				printf(" ");
		}	 
	}
	printf("\n");
}//0001 0010 0011 0100 0101 0110 0111 1000

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Eric 的頭像
    Eric

    一個小小工程師的心情抒發天地

    Eric 發表在 痞客邦 留言(0) 人氣()