51单片机C语言编程 数值转换

最近用51单片机写一个程序,将 unsigned long int转换为 四个 unsigned char,可是高16位转换总是为零。程序如下:
unsigned int page;
unsigned long int Recode;
unsigned char WRflash[20];
page=1281;
Recode=page*264;

WRflash[0]=(Recode/65536)/256;
WRflash[1]=(Recode/65536)%256;
WRflash[2]=(Recode%65536)/256;
WRflash[3]=(Recode%65536)%256;

WRflash[0],WRflash[1]总是为零,请各位技术大牛看看,哪里有问题,请多多指教。

第1个回答  2011-09-23
1,最简单的办法是定义一个联合,这样不用计算,直接去拿数就可以了。
2,用移位的方法
unsigned long int a;
a = Recode;
WRflash[0] = a & 0x000000FF;
a >>= 8;
WRflash[1] = a & 0x000000FF;
a >>= 8;
WRflash[2] = a & 0x000000FF;
a >>= 8;
WRflash[3] = a & 0x000000FF;
第2个回答  2011-09-23
本来就该是0吧。
第一个:
Recode/65536=4
4/256 当然等于0咯
/号表示的意思是去商。 4/246不够除,当然取0咯

第二个就不知道了。应该等于4的啊追问

WRflash[1]不应该为零的,可是每次都是零;

追答

那确实。

第3个回答  2011-09-25
unsigned long int Recode;
unsigned char WRflash[3];
void main()
{
Recode=0x01020304;
WRflash[0]=((unsigned char *)&Recode)[3];
WRflash[1]=((unsigned char *)&Recode)[2];
WRflash[2]=((unsigned char *)&Recode)[1];
WRflash[3]=((unsigned char *)&Recode)[0];
}这样也可以应该追问

谢谢。原程序中的Recode的值必须由page传递,page是个全局变量,我上面page的值只是为了举例说明,我想问一下,Recode的值是不是经过page的运算后先变成了unsigned int,,赋值给Recode的时候高十六位就变成了零,因为page是unsigned int。

追答

Recode=page*264;这条运算之后REcode还是属于长整型,你可以先调试看看是什么类型的运算之后,但是page*264的值应该是属于unsigned int这个范围的,其他也不是很清楚,最好通过调试看看,

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网