2.71 Xbyte
★
/* Declaration of data type where 4 bytes are packed into an unsigned */
typedef unsigned packed_t;
/* Extract byte from word. Return as signed integer */
int xbyte(packed_t word, int bytenum);/* Failed attempt at xbyte */
int xbyte(packed_t word, int bytenum) {
return (word >> (bytenum << 3)) & 0xFF;
}#include <stdio.h>
#include <assert.h>
typedef unsigned packed_t;
int xbyte(packed_t word, int bytenum) {
int size = sizeof(unsigned);
int leftshifts = (size - 1 - bytenum) << 3;
int rightshifts = (size - 1) << 3;
return (int)(word << leftshifts) >> rightshifts;
}
int main() {
assert(xbyte(0x88888888, 1)==0xFFFFFF88);
assert(xbyte(0x12345678, 2)==0x00000034);
return 0;
}Last updated