#include <stdio.h>
void sizedCopy(int size, int src, unsigned long *dst)
{
int chk;
int loop;
int shift;
shift = size - 1;
chk = (0x01 << (size - 1)); // from MSB to LSB
for(loop=0; loop<size; loop++) {
if ( (src & chk) > 0 ) {
*dst |= (0x01 << shift);
} else {
*dst &= ~(0x01 << shift);
}
chk = (chk >> 1);
shift--;
}
}
int main(void) {
unsigned long ulval = 0;
sizedCopy(3, 0x35, &ulval); // 0x35 = 110101b
printf("0x%X", ulval
); // answer: 0x5 return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIHNpemVkQ29weShpbnQgc2l6ZSwgaW50IHNyYywgdW5zaWduZWQgbG9uZyAqZHN0KQp7CglpbnQgY2hrOwoJaW50IGxvb3A7CglpbnQgc2hpZnQ7CgkKCXNoaWZ0ID0gc2l6ZSAtIDE7CgljaGsgPSAoMHgwMSA8PCAoc2l6ZSAtIDEpKTsgLy8gZnJvbSBNU0IgdG8gTFNCCgkKCWZvcihsb29wPTA7IGxvb3A8c2l6ZTsgbG9vcCsrKSB7CgkJaWYgKCAoc3JjICYgY2hrKSA+IDAgKSB7CgkJCSpkc3QgfD0gKDB4MDEgPDwgc2hpZnQpOwoJCX0gZWxzZSB7CgkJCSpkc3QgJj0gfigweDAxIDw8IHNoaWZ0KTsKCQl9CgkJY2hrID0gKGNoayA+PiAxKTsKCQlzaGlmdC0tOwoJfQp9CgppbnQgbWFpbih2b2lkKSB7Cgl1bnNpZ25lZCBsb25nIHVsdmFsID0gMDsKCXNpemVkQ29weSgzLCAweDM1LCAmdWx2YWwpOyAvLyAweDM1ID0gMTEwMTAxYgoJcHJpbnRmKCIweCVYIiwgdWx2YWwpOyAvLyBhbnN3ZXI6IDB4NQoJcmV0dXJuIDA7Cn0K