struct msg { u16 module_id; u16 cmd_id; u16 cmd_subid; u16 complete; u8 data[128]; };我有上述的一个msg结构体,现在我想将两个unsigned int类型数据放入msg结构体的data数组中,然后再从data数组内还原这两个数据,请在完全保存这两个数据的前提下,使用移位的方式实现,给出详细的代码
时间: 2024-03-13 12:44:37 浏览: 19
假设要保存的两个 unsigned int 类型的数据分别为 `data1` 和 `data2`,可以按照以下方式将它们存入 `msg` 结构体的 `data` 数组中:
```c
struct msg message;
unsigned int data1 = 12345;
unsigned int data2 = 67890;
message.data[0] = (data1 >> 24) & 0xFF;
message.data[1] = (data1 >> 16) & 0xFF;
message.data[2] = (data1 >> 8) & 0xFF;
message.data[3] = data1 & 0xFF;
message.data[4] = (data2 >> 24) & 0xFF;
message.data[5] = (data2 >> 16) & 0xFF;
message.data[6] = (data2 >> 8) & 0xFF;
message.data[7] = data2 & 0xFF;
```
在上述代码中,使用了移位操作符和按位与操作符将 `data1` 和 `data2` 的值分别存入了 `msg` 结构体的 `data` 数组中。
接下来,可以按照以下方式从 `msg` 结构体的 `data` 数组中还原这两个数据:
```c
unsigned int recv_data1, recv_data2;
recv_data1 = (message.data[0] << 24) | (message.data[1] << 16) | (message.data[2] << 8) | message.data[3];
recv_data2 = (message.data[4] << 24) | (message.data[5] << 16) | (message.data[6] << 8) | message.data[7];
```
在上述代码中,同样使用了移位操作符和按位或操作符将 `msg` 结构体的 `data` 数组中保存的数据还原到 `recv_data1` 和 `recv_data2` 变量中。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)