ストア:(4文字をunsignedintにストアします)
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;
}
ロード:(unsignedintから4文字をロードします)
int load(uint32_t * reg, unsigned char c[4])
{
for(int i=0;i<4;i++)
{
c[i] = *reg;
*reg = *reg>>8;
}
return 0;
}
使用例:
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;
}
それらをchar配列にリロードしたくないが、charポインターでそれらにアクセスしたい場合は、次に例を示します。
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;
}
メモリアドレスは逆の順序で作成されるため、この方法で出力「dcba」が得られることに注意してください。