私は32ビットまでの長さのフィールドを必要とするプロトコルを持っており、実行時に与えられたパケットにいくつのバイトがあるかを記述するためには が生成されなければなりません。バイトレベルの長さの説明
以下のコードは一種醜いですが、これをリファクタリングして にすることができますか少し効率的または簡単に理解できますか?問題は コードだけなので 未満255バイト=長さの1バイト、長 など未満65535 = 2バイト...
{
extern char byte_stream[];
int bytes = offset_in_packet;
int n = length_of_packet;
/* Under 4 billion, so this can be represented in 32 bits. */
int t;
/* 32-bit number used for temporary storage. */
/* These are the bytes we will break up n into. */
unsigned char first, second, third, fourth;
t = n & 0xFF000000;
/* We have used AND to "mask out" the first byte of the number. */
/* The only bits which can be on in t are the first 8 bits. */
first = t >> 24;
if (t) {
printf("byte 1: 0x%02x\n",first);
byte_stream[bytes] = first; bytes++;
write_zeros = 1;
}
/* Now we shift t so that it is between 0 and 255. This is the first, highest byte of n. */
t = n & 0x00FF0000;
second = t >> 16;
if (t || write_zeros) {
printf("byte 2: 0x%02x\n", second);
byte_stream[bytes] = second; bytes++;
write_zeros = 1;
}
t = n & 0x0000FF00;
third = t >> 8;
if (t || write_zeros) {
printf("byte 3: 0x%02x\n", third);
byte_stream[bytes] = third; bytes++;
write_zeros = 1;
}
t = n & 0x000000FF;
fourth = t;
if (t || write_zeros) {
printf("byte 4: 0x%02x\n", fourth);
byte_stream[bytes] = fourth; bytes++;
}
}
のパケットの長さを記述するのに十分なバイトを生成することです
この回答は確かに非常にコンパクトなコードソリューションを生成しますが、それがなぜ機能するのかはすぐには分かりません。私が選択した答えは、一目でわかりやすいコードでソリューションをクリアします。 –