现有一个嵌入式设备终端传输过来的数据包是一个32位无符号的整型数,这个数据包里面各位含义如下:(位运算)
00-07位:表示温度数据
08-15位:表示湿度数据
16-19位:表示4扇门状态(门的编号0-3)
20-23位:表示四盏灯的状态(灯编号0-3)
24-31位:预留备用
下面是最近一段时间接受的数据包:
请编写一个程序接收这3个数据包,并解析出对应的数据【温度,湿度,门0-3,灯0-3】(门和灯的状态0-关,1-开)。
代码如下:
#include <stdio.h>
#define temp 0x000000FF
#define humi 0x0000FF00
#define door0 0x00010000
#define door1 0x00020000
#define door2 0x00040000
#define door3 0x00080000
#define light0 0x00100000
#define light1 0x00200000
#define light2 0x00400000
#define light3 0x00800000
#define prepare 0xff000000
int main(int argc, char const *argv[])
{
unsigned int data, i, n;
for (i = 0;i < 3;i++)
{
printf("请输入接收数据:\n");
scanf("%x",&data);
printf("当前温度:%d℃\n",data & 0xff);
printf("当前湿度:%dRH\n",(data >> 8) & 0xff);
printf("门0: %s\t", (data & door0) ? "开":"关");
printf("门1: %s\t", (data & door1) ? "开":"关");
printf("门2: %s\t", (data & door2) ? "开":"关");
printf("门3: %s\n", (data & door3) ? "开":"关");
printf("灯0: %s\t", (data & light0) ? "亮":"灭");
printf("灯1: %s\t", (data & light1) ? "亮":"灭");
printf("灯2: %s\t", (data & light2) ? "亮":"灭");
printf("灯3: %s\n", (data & light3) ? "亮":"灭");
}
}