2016-04-03 58 views
-4

我只是想知道我怎麼能創造C.我需要一個像這樣的分組字節的數據包:如何在C中創建一個字節數據包?

類型: Unisgned CHAR 1個字節

名稱:字符7字節

的Mac:字符13個字節

隨機數:字符7字節

數據:字符50個字節

這將與1個字節字符的結構,但問題是大小:

struct PDU{ 
    unsigned char code; 
    char name; 
    char mac; 
    char RNumber; 
    char data; 
} 

我如何可以改變字符的大小?

感謝

+0

'stdint.h'定義了8位長的帶符號和無符號整數。使用這些細粒度控制。 – StoryTeller

+0

「我知道我必須使用結構」 - 對結構進行編碼並查看它是否適合您的需求?只是一個建議,如果你不能聲明一個符合你在問題中陳述的領域的C結構,某種東西告訴我結構佈局只是即將成爲一個非常非常大的冰山的一角;就像你*需要*這樣做的。 – WhozCraig

+3

@Sibidharan:「'char'不能是'unsigned',因爲它沒有符號」???我建議你在發佈這種類型的語句之前進行一些研究(例如,採取最基本的C課程)。特別是如果你選擇在他們之前加入「你在開玩笑」類型的話! –

回答

0

你不能改變大小的char - 但你可以使char夠長列出了每個項目的(這些被稱爲「陣列」):

struct PDU{ 
    unsigned char code; 
    char name[7]; 
    char mac[13]; 
    char RNumber[7]; 
    char data[50]; 
}; 

當心結構填充:C編譯器可以自由地在每個這些項目之間添加填充字節。它可能會這樣做,因爲訪問「字對齊」數據通常比「任何字節」更快。您可以指示編譯器不會被這種結構前添加一個特殊的編譯器指令,這樣做,通常(檢查你的編譯器手冊!)像

#pragma pack(1) 

如果有這樣一個不需要經過其他結構定義刪除它們的填充,查找指令以再次恢復正常服務並將其添加到該結構定義之下。

將數據複製到此結構中時,絕對是至關重要您不會複製'越界'並覆蓋下一項中的數據。 (這適用於C中的所有程序,但我不妨再提及它。)