Store: (store 4 chars into an unsigned int)
int store(uint32_t * reg, unsigned char c[4])
{
*reg = 0;
for(int i=0;i<4;i++)
{
*reg = (*reg<<8) | c[i];
}
return 0;
}
Load: (load 4 chars from an unsigned int)
int load(uint32_t * reg, unsigned char c[4])
{
for(int i=0;i<4;i++)
{
c[i] = *reg;
*reg = *reg>>8;
}
return 0;
}
Usage example:
int main ()
{
unsigned char c[4] = {'a','b','c','d'};
uint32_t reg;
printf("%c",c[0]); //it prints 'a'
store(®,c);
c[0] = 'e';
printf("%c",c[0]); //it prints 'e'
load(®,c); //load
printf("%c",c[0]); //it prints 'a' again
return 0;
}
If you don't want to reload them into a char array, but to access them by a char pointer, then here's an example:
int main (int argc, char const *argv[])
{
unsigned char c[4] = {'a','b','c','d'};
uint32_t reg;
store(®,c);
unsigned char *cpointer = (unsigned char *) ®
for(int i=0;i<4;i++)
{
printf("%c",cpointer[i]); //access the 4 chars by a char pointer
}
return 0;
}
Please note that the you will get an output 'dcba' in this way, as the memory address are made in the reverse order.