#include #include int isSpecialEncoding(unsigned int data) { return (data & 0x12345678) == 0; } unsigned int getBits(unsigned int data, unsigned int msb, unsigned int lsb) { assert(msb >= lsb); if (isSpecialEncoding(data)) { /*if ((msb > 15) || (lsb > 15)) { return 0; }*/ return (data << (15 - msb)) >> (lsb + (15 - msb) + 16); } else { return (data << (31 - msb)) >> (lsb + (31 - msb)); } } int main(int argc, char* argv) { return (getBits(argc, 23,22) << 8) | getBits(argc, 31, 24); }