我在C程序設計新和我測試一些代碼,我接收和處理格式化爲後續一個UDP包:C UINT16如何正確使用?
UINT16 port1
UINT16 port2
在這個測試的相應的值是:
6005
5555
如果我打印整個數據包緩衝區我得到的是這樣的:
u^W³^U><9e>^D
所以我想,我只想必須將其分解並處理爲16字節的unsigned int
。所以我試過這樣的事情:
int l = 0;
unsigned int *primaryPort = *(unsigned int) &buffer[l];
AddToLog(logInfo, "PrimaryPort: %u\n", primaryPort);
l += sizeof(primaryPort);
unsigned int *secondaryPort = *(unsigned int) &buffer[l];
AddToLog(logInfo, "SecondaryPort: %u\n", secondaryPort);
l += sizeof(secondaryPort);
但我得到8位數字的錯誤數字。
我甚至嘗試了另一種方法,如跟隨,但也得到了錯誤的數字。
int l = 0;
unsigned char primaryPort[16];
snprintf(primaryPort, sizeof(primaryPort), "%u", &buffer[l]);
AddToLog(logInfo, "PrimaryPort: %d\n", primaryPort);
l += sizeof(primaryPort);
unsigned char secondaryPort[16];
snprintf(secondaryPort, sizeof(secondaryPort), "%u", &buffer[l]);
AddToLog(logInfo, "SecondaryPort: %d\n", secondaryPort);
l += sizeof(secondaryPort);
我在做什麼錯?另外,爲什麼我必須釋放一個字符串變量,但我不需要釋放int變量?
如果您問的是C,爲什麼C++和C#中的標籤? – n0rd
最有可能的是,在你的系統中'unsigned int'實際上不是一個16位整數,而'sizeof(unsigned int)!= 2'。並且'*(unsigned int)&buffer [l]'沒有任何意義(也不能編譯):你正在投射一個指向一個整數的指針,然後試圖解引用這個整數。 –
「另外,爲什麼我必須釋放char字符串變量,但是我不需要釋放int變量?」無論你是否需要調用'free',都不是變量類型的問題。 –