背景轉換INT 14236十六進制379C爲char [37,9C]在C++
我創建一個簡單BOOTP/DHCP服務器,並且我與創建的一些包中的字節掙扎 - 特別是DHCP選項13,FileSize。
該規範狀態選項爲具有64個字節用於ID(13)=> 1個字節,對於數據長度1個字節,總長度和剩餘的字節數據或0
問題
我需要將int值14236表示爲我的數據,這相當於HEX中的379C,但這需要分散在2個字節的數據中。如何獲取int並獲取數據的char []?
背景轉換INT 14236十六進制379C爲char [37,9C]在C++
我創建一個簡單BOOTP/DHCP服務器,並且我與創建的一些包中的字節掙扎 - 特別是DHCP選項13,FileSize。
該規範狀態選項爲具有64個字節用於ID(13)=> 1個字節,對於數據長度1個字節,總長度和剩餘的字節數據或0
問題
我需要將int值14236表示爲我的數據,這相當於HEX中的379C,但這需要分散在2個字節的數據中。如何獲取int並獲取數據的char []?
int size = 14236;
unsigned char bytes[2] = { (size >> 8) & 0xff, size & 0xff };
printf("%x%x", bytes[0], bytes[1]);
注意:您需要確保兩個字節被放置在網絡的順序排列,這要是我的。我們把爲大端。
第一個答案,它的工作原理。多謝你們!現在來打磨我生鏽的C++技能。 – justacodemonkey
您可以使用此代碼:
int size;
assert(size < 0x10000);
unsigned char twoBytes[];
twoBytes[0] = size & 0xFF;
twoBytes[1] = size >> 8;
它可能需要在網絡字節順序。如果是這樣,那麼你可以使用htons
。如果你想它的兩個字節:
char buffer[4];
buffer[0] = 13; // code
buffer[1] = 2; // length
*(uint16_t*)(buffer + 2) = htons(14236);
這個問題非常好。謝謝馬克 – justacodemonkey
所以,你的包:
unsigned char optionBytes[64];
然後,設置ID和數據長度:
optionBytes[0] = 13;
optionBytes[1] = 2;
最後,請計算您的值的高位字節和低位字節:
optionBytes[2] = 14236/256;
optionBytes[3] = 14236 % 256;
這假定您希望以「big-endian」格式表示數據,而較低的偏移值更值得。
Int爲char? itoa()http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/ – nacho4d