有人能告訴我什麼這行代碼做類型轉換
*(a++) = (int)((value >> 16) & 0xFF) ;
*(a++) = (int)((value >> 8) & 0xFF) ;
*(a++) = (int)((value & 0xFF)) ;
據我所知,它會檢查的價值,如果它是遠遠大於16它將它轉換成int型,如果是多少小於8也是一樣。但是
& 0xFF
和*(a++)
做什麼?
有人能告訴我什麼這行代碼做類型轉換
*(a++) = (int)((value >> 16) & 0xFF) ;
*(a++) = (int)((value >> 8) & 0xFF) ;
*(a++) = (int)((value & 0xFF)) ;
據我所知,它會檢查的價值,如果它是遠遠大於16它將它轉換成int型,如果是多少小於8也是一樣。但是
& 0xFF
和*(a++)
做什麼?
(值>> 16)
不,它不是更大。
It is shift right by 16 bits.
但是,將其分割爲2倍,使其比以前小得多。
val&0xff makes a solution if it is divisible by 256. For example: if val&0xff is different than zero, than it is not divisible by 256
*(a++) = (int)((value >> 16) & 0xFF) ;
是這樣的:
aIntValue = value/65536;
aIntBalue = a%256;
*(a++) = (int)((value >> 8) & 0xFF) ;
是這樣的:
aIntValue = value/256;
aIntValue = a%256;
*(a++) = (int)((value & 0xFF)) ;
是這樣的:
aIntValue = a%256;
在代碼結束時,無論是碼分配給aIntValut指向的值的指針「a」和旁邊的指針移動到下一個元素。
考慮:
char data[10];
uint32_t value = 0x61626364; // 'abcd'
char *a = data;
*(a++) = (int)((value >> 24) & 0xFF);
*(a++) = (int)((value >> 16) & 0xFF);
*(a++) = (int)((value >> 8) & 0xFF);
*(a++) = (int)(value & 0xFF);
*(a++) = ':';
*((uint32_t *)a) = value;
a+=4;
*(a++) = 0;
printf("%s\n", data);
我得到(在我的英特爾盒子,裏面是一個小端系統):
abcd:dcba
因此,這是確保一個整數的字節在一個平臺獨立形式(選擇big endian作爲字節格式)。
現在,:
*(a++) = (int)((value >> 16) & 0xFF);
我們:
0x61626364 -- value
0x00006162 -- value >> 16 : shifted 2 bytes
0x00000062 -- (value >> 16) & 0xFF : last byte only
「_much_小」 是不是由計算機理解的術語。這是你理解的暗示'''並不意味着更小! – Shahbaz 2012-08-07 10:17:06
編程符號與數學符號不同。基本上在每種語言中,每個符號可以表示與其他語言意義非常相關的東西。 – c00kiemon5ter 2012-08-07 10:17:12