有人能解釋一下這個代碼是什麼的C代碼這一小段就
size = *(int *)data; // size of string plus header word
off = (size + 3) & ~3;
chan = *(int *)(data + off);
data[size] = '\0'; // zero terminate
我認爲它得到的東西做使數據4的倍數?
有人能解釋一下這個代碼是什麼的C代碼這一小段就
size = *(int *)data; // size of string plus header word
off = (size + 3) & ~3;
chan = *(int *)(data + off);
data[size] = '\0'; // zero terminate
我認爲它得到的東西做使數據4的倍數?
假設data
是char*
...
size = *(int *)data; // size of string plus header word
data
被解釋爲指針TO- int
,然後解除引用並分配給size
。
off = (size + 3) & ~3;
此舍入size
向上4最接近的倍數,和分配給off
。
chan = *(int *)(data + off);
爲chan
值顯然駐留從data
off
字節。
data[size] = '\0'; // zero terminate
這一點很明顯。
謝謝托馬斯,多數民衆贊成 – mikip 2010-01-26 16:13:49
這條線投射data
到的指針int
和取消引用指針和存儲名爲size
在變量中的值:
size = *(int *)data;
此行得到的四個最小倍數大於或等於size
和結果賦給變量off
:
off = (size + 3) & ~3;
此行得到一個int
值偏移從指針data
並將結果存儲個字節chan
:
chan = *(int *)(data + off);
此行空終止所述存儲器塊:
data[size] = '\0';
所以看起來size
是存儲器塊,其中所述第一sizeof(int)
字節的data
可以被認爲是指示存儲器塊的size
的int
。顯然在data
加sizeof(char) * smallestmultipleoffourlargerthan(size)
有意義的數據。不知道data
的詳細信息,這是我們可以說的最好的。
謝謝傑森,你一直是最有幫助的 – mikip 2010-01-26 16:12:07
建立在Jason的答案上,它看起來像這段代碼將拆分開始存儲在data
處的數據結構的內容。那裏存儲的數據結構似乎是這樣的格式:
{
int size;
char data[(size + 3) & ~3];
int chan;
}
什麼是數據類型?字符數組? – schot 2010-01-26 16:04:34
'data'的類型是什麼? – jason 2010-01-26 16:05:25
它是一個字符數組謝謝 – mikip 2010-01-26 16:05:41