[英]How to write EXACTLY n bits to UDP packet c++
作為學習大學內容的一種方式,我決定開始使用UDP和新的線程內存模型在c ++ 11中編寫網絡庫。 這是我目前最大的障礙。
字節的大小是特定於平台的。 Memcpy根據該平台上的字節大小進行復制和寫入。 那么我該如何制作與平台無關的代碼來准確地將 N位寫入我的UDP數據包呢? N通常是8的倍數,但我需要確保當我處理N個字節時,無論平台如何,都會修改相同數量的位。
我認為最接近解決方案的是使用32位的基本結構,並將其作為8組進行訪問。例如
struct Data
{
char a : 8;
char b : 8;
char c : 8;
char d : 8;
}
這樣,我知道每個char將限制為8個字節。 我的消息都是32的倍數 - 這沒問題(這個結構在處理字節序時實際上會有幫助)。 但是,我怎么能確定編譯器不會將結構填充到平台的原生邊界? 這會有用嗎?
您的數據結構不足。 char
類型被編譯器定義為signed char
(7個數據位,1個符號位), unsigned char
(8個數據位)或char
。
發送數據包的大多數計算機使用unsigned char
或uint8_t
作為八位字節。
另外,要注意多字節排序,稱為Endianness。 Big endian是最重要的字節首先出現的地方; 小端是最不重要的字節首先出現的地方。
許多消息傳遞方案將使用零填充剩余的位,以使它們達到8位,16位或32位數量。
您可能正在尋找#pragma pack(nopack)
指令。 正如有人指出的那樣,你仍然會處理8位的倍數。
char應該總是正好1個字節,AFAIK雖然我可能是錯的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.