ビットマスキングやビットオーバーフローの処理に苦労しています。ビットマスキング(char)(0xFFFFFFB8&0xFF)がCで機能しません
データストリームからデータを取得し、それはchar
型バッファに格納されており、バッファの特定のインデックスにアクセスする必要があります。私がそうしようとすると、予期せぬ結果が出ます。以下のような
何か..
char buffer[BUFFER_SIZE];
/* ...recv from network stream performed... */
printf("buffer[index] = 0x%x\n", buffer[index]); /* => 0xFFFFFFB8 */
char dummyChar = buffer[index] & 0x000000FF;
printf("dummyChar = 0x%x\n", dummyChar); /* => 0xFFFFFFB8 */
バッファがchar
タイプです。バッファ[インデックス]を印刷すると、なぜ32ビットサイズになるのですか?
また、buffer[index]
を0x000000FFでマスクしましたが、まだ0xFFFFFFB8を取得しています。どうして?
私は0xB8を取得したいだけ、誰かが私にどのように伝えることができますか?
裸の 'char'の代わりに' unsigned char'を使用してください。 –
ありがとうございます。それは今働きます! :) –
この種のプログラミングを行うときは、stdint.h型をどこでも使用してください。 – Lundin