ここに示すビットシフトの例 では:
unsigned long int longInt = 1234567890;
unsigned char byteArray[4];
// convert from an unsigned long int to a 4-byte array
byteArray[0] = (int)((longInt >> 24) & 0xFF) ;
byteArray[1] = (int)((longInt >> 16) & 0xFF) ;
byteArray[2] = (int)((longInt >> 8) & 0XFF);
byteArray[3] = (int)((longInt & 0XFF));
3 つの質問:
- なぜ (unsigned char) ではなく (int) なのですか? unsigned char で試してみたところ、問題なくコンパイルできたようです。
- 0XFFは必要ですか?ウィキペディアによると、C では論理シフトと論理シフト シフトが 0 で使用されるため、新しいビットはシフトインされた 0 ではありませんか? (編集:少なくとも>> 24の場合は必要ないようです?)
- memcpy() を実行して longInt を unsigned char バッファにコピーすることはできませんか? エンディアンネスの問題ではないでしょうか?他に理由はありますか?