详解C++/C中的数据在内存中的存取

本文介绍了指针的一个使用技巧,可以通过此方法将单片机中的变量按字节保存到EEPROM中,也可以从EEPROM中还原一个多字节的整型数或者浮点数。

在内存中变量对整数类型,包括
char, unsigned char, int, unsigned int, long, unsigned long
多于一个字节的按低字节在前,高字节在后的顺序存储的,比如
int iv = 0x1234,则在内存中的存储顺序,从地址由低到高的顺序排列,其值分别为: 34 12
long lv = 0x11223344则在内存中的顺序为: 44 33 22 11
如果想修改一个整型数的某个字节,则可以运用指针直接进行操作如下所示:
unsigned char *puc;
int i;
long lv = 0x11223344;
unsigned char temp[4]={0,0,0,0};

*puc = (unsigned char*)(&lv);
for(i=0; i{
temp = *(puc+i);
}
运行后temp中的值则为temp[]={0x44, 0x33,0x22,0x11};
如果要修改一个数的值也可以直接用以上方法把赋值前后的操作数对调一下即可
*(puc+i) = temp;
即可通过*puc将temp中的单字节数转换为一个长整型数赋给 lv
这种操作方法对数据的存储很有用,可以通过指针将长整型的数分别一个字节一个字节地写到文件中,读的时候按照同样的顺序再从文件中读到内存。当然在PC上也可以直接将长整型的数写到文件中,而在单片机中则只能一个字节一个字节地将数据写入到EEPROM中,通过这种指针操作就可以写到EEPROM中,或者读出整型或者浮点型数。以下为在ICCAVR中将数据写入到EEPROM和读出的程序。
void EEPROMWriteLong( int addr,    // address in EEPROM
      long dsrc)   // source data
{
unsigned char *puc;

puc = (unsigned char*)(&dsrc);
EEPROMWriteBytes(addr, (void*)puc, sizeof(long));
}    

long EEPROMReadLong( int addr)
{
long res;
unsigned char *puc = (unsigned char*)(&res);
EEPROMReadBytes(addr, (void*)puc, sizeof(long));
return res;
}

指针真是一个好东东,用好了就像一把无坚不摧锐利无比的长矛,但是用不好了可是会扎自己哦,这就是C的精华之民在吧!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值