2

私は他の人のコードを読んでいますが、それがどのように機能しているのかよくわかりません。これが 3 行のコードです。w3 の値を知りたい:

int w1 = fgetc(fp) & 0xFF;
int w2 = fgetc(fp) & 0xFF;
int w3 = w1 + (w2 << 8);

fgetc() が FILE* fp から文字を返すことは理解していますが、値が 0xFF の文字に & 演算子を使用すると混乱します。次に、w2 でビットごとのシフト演算子を使用し、それを w1 に追加します。文字と整数のどちらを期待すべきかわかりません。これは、ファイルからバイナリ データを読み取り、出力として UV 座標を生成するプログラムのコード スニペットです。しかし、私はそのことにはあまり関心がなく、上記のコードがどのように機能するかについてより関心があります。

ご回答ありがとうございます。

4

2 に答える 2

3

& 0xff、結果が符号なしであることを保証します。次に、w1 + (w2 << 8)2 バイトから 16 ビット整数を作成します。実際、このコード スニペットはリトルエンディアンの 2 バイト整数を読み取っています。

于 2013-02-07T00:59:04.133 に答える
1

これが行うことは、受信したものを 1 バイトint w1 = fgetc(fp) & 0xFF;にマスクすることです。int(結局 をfgetc()返しますint)

これw1 + (w2 << 8);が行うことは、両方のバイトを単一の に結合することintです。おそらく、以前にシリアル化された整数を逆シリアル化しようとしています。(エンディアンが問題になる場合は、最善の方法ではありません)

于 2013-02-07T00:58:14.600 に答える