2011-12-08 14 views
1

背景変換int型の14236 charとして[37,9C] C++

に私は、単純なBOOTP/DHCPサーバーを作成しています、と私は、パケットのバイトの一部を作成するに苦しんでいます - 、特にDHCPオプション13、FileSize。

スペック状態オプションIDのための64バイト=> 1バイト(13)、データ長は1バイト、及びデータOR 0

通報

として残っているバイトの合計長さを有するものとして

私のデータとしてint値14236を表現する必要があります。これはHEXで379Cに相当しますが、これは2バイトのデータに分散する必要があります。どのようにintを取得し、データのchar []を取得するのですか?

+0

Int to char? itoa()http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/ – nacho4d

答えて

1
int size = 14236; 
unsigned char bytes[2] = { (size >> 8) & 0xff, size & 0xff }; 

printf("%x%x", bytes[0], bytes[1]); 

ように注意してください:あなたは2つのバイトはI「が間違っていないメートル場合はビッグエンディアンであるネットワーク順に配列に格納されていることを確認する必要があります。

+0

最初の答えは、それが動作します。みんなありがとう!今私の錆びたC++スキルを磨くために。 – justacodemonkey

3

あなたはこのコードを使用することができます:

int size; 
assert(size < 0x10000); 

unsigned char twoBytes[]; 
twoBytes[0] = size & 0xFF; 
twoBytes[1] = size >> 8; 
4

それはおそらくネットワークバイトオーダーにする必要があります。その場合はhtonsを使用できます。 2番目の2バイトでそれをしたい場合は:だから

char buffer[4]; 
buffer[0] = 13; // code 
buffer[1] = 2; // length 
*(uint16_t*)(buffer + 2) = htons(14236); 
+0

この質問に非常に良い追加。ありがとうマーク – justacodemonkey

0

、あなたはパケットを持っている:

unsigned char optionBytes[64]; 

はその後、IDとデータ長を設定します。

optionBytes[0] = 13; 
optionBytes[1] = 2; 

そして最後に、あなたの値の上位バイトと下位バイトを計算してください:

optionBytes[2] = 14236/256; 
optionBytes[3] = 14236 % 256; 

これは、 "ビッグエンディアン"形式で表されたデータを、より小さいオフセットの値がより価値あるものにすることを前提としています。

関連する問題