Я пытаюсь извлечь 4 байта из шестнадцатеричного значения, хранящегося в переменной int.
Моя идея состоит в том, чтобы «выдвинуть» требуемый байт в конец с помощью оператора сдвига вправо (>>), а затем использовать оператор AND сЗначение 0xFF, чтобы получить только последние 8 битов значения.Он отлично работает со значениями чисел (например, 73), но не работает со значениями af (например, 3f).Я попытался использовать различные форматы для printf, например% 02x, и я также попытался изменить маску для оператора AND на 0x000000FF.
int variable = 0x12cd34f4;
char byte0, byte1, byte2, byte3;
byte0 = (char)(variable & 0xFF);
byte1 = (char)((variable >> 8) & 0xFF);
byte2 = (char)((variable >> 16) & 0xFF);
byte3 = (char)((variable >> 24) & 0xFF);
printf("%x\n",byte0);// prints fffffff4
printf("%x\n",byte1);// prints 34
printf("%x\n",byte2);//prints ffffffcd
printf("%x\n",byte3);//prints 12
Я ожидал, что он напечатает f4 для byte0, 34 для байта1, cd для байта2 и 12 для байта3, но фактический выход для байта0 равен fffffff4 и для байта2 ffffffcd .Я не понимаю, почему эти значения F добавляются и как я могу от них избавиться.