#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;
}
