c 中通過char 收簡單定長報文

2021-07-31 14:01:44 字數 593 閱讀 6607

最近涉及到接收報文這一塊,記錄一點小經驗。

一般來說:接收傳送最簡單的情況是這樣的:

typedef struct mymsg

mymsg,*pmymsg;

int main()

我的具體情況是傳送方沒有規定結構體,直接用char*按一定規則傳送資料。我在接收的時候按那個規則構造了乙個結構體,然後強轉。如:

if(msg != null && len <= sizeof(mystruct))

這樣就可以直接取值了。當然這是定長報文,結構體都很簡單,如果出現了指標等變長成員還得慢慢解析。

在構造結構體的時候在收尾加了兩句話:

#pragma pack(push,1)

mystrcut;

#pragma pack(pop,1)

#pragma pack是指定資料在記憶體中的對齊方式,如果不寫這兩句話,則結構體在編譯時按預設方式對齊,即成員中size最大的那個,就可能出現一些空位元組。

當然裡面也可以寫出了1之外的其他數字。

c 中char 和 char 的區別

問題引入 在實習過程中發現了乙個以前一直預設的錯誤,同樣char c abc 和char c abc 前者改變其內 容程式是會崩潰的,而後者完全正確。程式演示 測試環境devc include using namespace std main 執行結果 2293628 4199056 abc 229...

c 中char 和 char 的區別

問題引入 在實習過程中發現了乙個以前一直預設的錯誤,同樣char c abc 和char c abc 前者改變其內 容程式是會崩潰的,而後者完全正確。程式演示 測試環境devc include using namespace std main 執行結果 2293628 4199056 abc 229...

c 中char 和 char 的區別

問題引入 在實習過程中發現了乙個以前一直預設的錯誤,同樣char c abc 和char c abc 前者改變其內 容程式是會崩潰的,而後者完全正確。程式演示 測試環境devc include using namespace std main 執行結果 2293628 4199056 abc 229...