What is the preferred method for allowing byte (or even nibble) access to unsigned long variables?
example: a setup program that is taking a number off a screen (in BCD) on a per character basis (say with a button that steps to each character) and places the result in an unsigned long int (preferably still in BCD). I thought of three methods: 1. Use a union. 2. Use a character array and then use shift assignments to initialize the proper variables before and after 3. Try to access the RAM directly (access the unsigned long as if it were a character array). implementation: 1. should be obvious 2. unsigned char testlong[4]; // initialize from RAM testlong[0] = ramval & 0x000F; testlong[1] = ( ramval & 0x00F0 ) >> 4; testlong[2] = ( ramval & 0x0F00 ) >> 8; testlong[3] = ( ramval & 0xF000 ) >> 12; // Mess with testlong using loops, etc // Copy value back to RAM correctraw = ( testlong[3] << 12 ) + ( testlong[2] << 8 ) + ( testlong[1] << 4 ) + testlong[0]; 3. Access the unsigned int as a string. The compiler complains about this. But one way around the complaints is to use a pointer. unsigned long int *longpointer; longpointer = *ramval; longpointer[0] = (uchar)something; etc. The reason for wanting to access the variable using byte operations is that it makes it easy to "step across" ram val with an index. The only alternative I can think of is to hard code each "byte" update of the ramval (lots of code). Thanks for any ideas. One last thing: is there a way to force the compiler to use a RAM location for a variable as opposed to the Stack (I know, same thing), or a register? -Mark