1. 有如下数组 char dd[] = {8A 8A 8A 01 07 05 00 00 00 00 01 01 02 01 01 01 FF FF 8A 8A 8A 01 16 05 00 00 00 00 01 02 02 01 00 00 ff ff 8A 8A 8A 01 07 05 00 00 00 00 01 01 02 01 01 01 FF FF} 请写一段代码,将上述数组按照指令格式解析到三个数组
时间: 2023-08-22 09:04:29 浏览: 33
首先需要了解指令格式的定义,这里假设每个指令由4个字节组成,第1个字节表示指令类型,第2个字节表示指令长度,第3个和第4个字节表示指令参数。
根据这个定义,我们可以先将原数组按照指令格式解析到一个临时数组中,然后再根据指令类型将指令分别存储到三个数组中。具体实现如下:
```c++
#include <cstring>
#include <iostream>
using namespace std;
const int MAX_LEN = 100;
int main() {
char dd[] = {0x8A, 0x8A, 0x8A, 0x01, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0x8A, 0x8A, 0x8A, 0x01, 0x16, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8A, 0x8A, 0x8A, 0x01, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0xFF, 0xFF};
int len = sizeof(dd) / sizeof(char);
char temp[MAX_LEN];
int temp_len = 0;
char type[MAX_LEN], length[MAX_LEN], param[MAX_LEN];
int type_len = 0, length_len = 0, param_len = 0;
for (int i = 0; i < len; i += 4) {
if (i + 4 > len) {
break;
}
// 解析指令类型
type[type_len++] = dd[i];
// 解析指令长度
length[length_len++] = dd[i + 1];
// 解析指令参数
for (int j = 0; j < 2; j++) {
param[param_len++] = dd[i + j + 2];
}
// 如果已经解析到一个完整的指令,则将其存储到对应的数组中
if (dd[i + 1] == param_len) {
memcpy(temp + temp_len, type, type_len);
temp_len += type_len;
memcpy(temp + temp_len, length, length_len);
temp_len += length_len;
memcpy(temp + temp_len, param, param_len);
temp_len += param_len;
if (type[0] == 1) {
// 存储到第一个数组中
// ...
} else if (type[0] == 2) {
// 存储到第二个数组中
// ...
} else if (type[0] == 3) {
// 存储到第三个数组中
// ...
}
// 清空临时数组
type_len = length_len = param_len = 0;
}
}
return 0;
}
```
这段代码会将原数组按照指令格式解析到临时数组中,然后根据指令类型将指令分别存储到三个数组中。需要注意的是,这里只是简单示例,实际应用中需要根据具体需求进行修改。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)