2010-01-26 48 views
1

有人能解釋一下這個代碼是什麼的C代碼這一小段就

size = *(int *)data;  // size of string plus header word 
off = (size + 3) & ~3; 
chan = *(int *)(data + off); 
data[size] = '\0';  // zero terminate 

我認爲它得到的東西做使數據4的倍數?

+1

什麼是數據類型?字符數組? – schot 2010-01-26 16:04:34

+0

'data'的類型是什麼? – jason 2010-01-26 16:05:25

+0

它是一個字符數組謝謝 – mikip 2010-01-26 16:05:41

回答

3

假設datachar* ...

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值顯然駐留從dataoff字節。

data[size] = '\0';  // zero terminate 

這一點很明顯。

+0

謝謝托馬斯,多數民衆贊成 – mikip 2010-01-26 16:13:49

1

這條線投射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可以被認爲是指示存儲器塊的sizeint。顯然在datasizeof(char) * smallestmultipleoffourlargerthan(size)有意義的數據。不知道data的詳細信息,這是我們可以說的最好的。

+0

謝謝傑森,你一直是最有幫助的 – mikip 2010-01-26 16:12:07

0

建立在Jason的答案上,它看起來像這段代碼將拆分開始存儲在data處的數據結構的內容。那裏存儲的數據結構似乎是這樣的格式:

{ 
    int size; 
    char data[(size + 3) & ~3]; 
    int chan; 
}