打印

请教一个8位char转long int的问题。

[复制链接]
4902|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
krstc|  楼主 | 2009-7-11 22:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做的一个频率计,long int fre是32位的,写入24c01保存,拆成4个8位char写入。现在读取后,如何还原成long int呢?谢谢大家了!小弟初学。见笑了。

temp=i2cbuff[7]*256*256*256+i2cbuff[8]*256*256+i2cbuff[9]*256+i2cbuff[10];
我现在的方法是这样的,就是*256,但是程序显示超过65535的时候就归0了。不知为何。谢谢了。

相关帖子

沙发
一条大河| | 2009-7-11 22:23 | 只看该作者

用位移吧

使用特权

评论回复
板凳
krstc|  楼主 | 2009-7-11 22:36 | 只看该作者

请问如何位移?倒腾了好长时间了。

不太明白,麻烦2l给出一下说明可以吗?谢谢了。!

使用特权

评论回复
地板
again_gyf| | 2009-7-11 22:46 | 只看该作者

结构体+联合体

注意大小端

使用特权

评论回复
5
krstc|  楼主 | 2009-7-11 22:49 | 只看该作者

4楼的方法没明白?

可以具体说一下吗?谢谢了!

使用特权

评论回复
6
vwwj| | 2009-7-11 23:06 | 只看该作者

unsigned long dwFreq = *((unsigned long*)(&i2cbuff[7]));

使用特权

评论回复
7
wsl_5631| | 2009-7-12 08:53 | 只看该作者

xx


至于你的归零问题应该这样写

temp=i2cbuff[7]*(256ul*256ul*256ul)+i2cbuff[8]*(256ul*256ul)+i2cbuff[9]*256+i2cbuff[10];

可以这样做
写入

write_24c01(xxx,(uchar idata *)(&fre),4);

读取

read_24c01(xxx,(uchar idata *)(&fre),4);

使用特权

评论回复
8
ayb_ice| | 2009-7-12 10:31 | 只看该作者

搞清楚long在内存中是怎么存储的,自然就搞定了

使用特权

评论回复
9
inter_zhou| | 2009-7-12 18:43 | 只看该作者

7楼的写法没有效率

更好的方式应该是直接用指针操作。

使用特权

评论回复
10
baidongliang| | 2009-7-13 11:29 | 只看该作者

ul?

7楼中256后面的"ul"是啥?

使用特权

评论回复
11
ayb_ice| | 2009-7-13 21:00 | 只看该作者

ul = unsigned long

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

53

帖子

0

粉丝