有一句程序不懂,那位大侠帮帮我?? C语言的 PLAY[3] = *((U8*)(&ReceiveHighByte) + 1)/10;

[复制链接]
查看11 | 回复4 | 2018-4-5 18:27:55 | 显示全部楼层 |阅读模式
标准c语言int是16位2个字节,如:ReceiveHighByte=2013(0x07DD) 占两个字节,分别是0x07和0xDD &ReceiveHighByte
取到地址,即该变量的起始地址 (U8*)(&ReceiveHighByte)
将上一步得到的地址转化成char*型地址,每个char只占一位 (U8*)(&ReceiveHighByte) + 1
因为是char*地址类型,所以+1,是跳1位8个字节,即指向后一位的内容 在计算机中存储是低位在前,高位在后,所以上一步得到的是ReceiveHighByte的高位,即0x07,下面就简单了。*((U8*)(&ReceiveHi...
回复

使用道具 举报

千问 | 2018-4-5 18:27:55 | 显示全部楼层
PLAY[3] = *((U8*)(&ReceiveHighByte) + 1)/10;//取变量RecelveHighByte的地址,并转换为unsigned char 类型指针,地址+1后取地址指向的字节数值((这句可能是取一个16位整数的高位或低位字节吧)并/10后赋给 PLAY[3]; typedef unsigned char U8; ...
回复

使用道具 举报

千问 | 2018-4-5 18:27:55 | 显示全部楼层
typedef unsigned char U8;替代法U8定义的变量都在unsigned char U8替代U8例子:U8 *p,c;替代后实际意义为:unsigned char *p,c; unsigned int ReceiveHighByte;unsigned: 无符号修饰int :integer数据类型unsigne...
回复

使用道具 举报

千问 | 2018-4-5 18:27:55 | 显示全部楼层
把ReceiveHighByte地址后面的一个地址中存放的值除以10取整然后赋值给 PLAY[3]...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行