“AA 6F 00 60 00 01 20 20 32 30 30 30 2D 30 31 2D 31 30 20 20 30 37 3A 32 37 3A 33 38 20 20 20 20 20 20 20 20 20 20 CC 33 C3 3C”报文内容都是16进制数 根据协议头尾跳去内容的C语言代码
时间: 2024-02-05 09:03:12 浏览: 27
根据给出的报文内容,可以将其转换为16进制数的整数数组,并通过判断头尾是否正确来验证数据的有效性,以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
unsigned char Comm_Head[6] = {0xAA, 0x6F, 0x00, 0x60, 0x00, 0x01};
unsigned char Comm_End[4] = {0xCC, 0x33, 0xC3, 0x3C};
int main() {
unsigned char data_str[] = "AA6F006000012020323030302D30312D3130202020373A32373A3338202020202020202020CC33C33C";
int data_len = sizeof(data_str) / sizeof(unsigned char);
int data[data_len / 2]; // 存放转换后的16进制整数
// 将16进制字符串转换为整数数组
for (int i = 0; i < data_len; i += 2) {
char hex_str[3] = {data_str[i], data_str[i+1], '\0'};
data[i/2] = strtol(hex_str, NULL, 16);
}
// 判断头部是否正确
for (int i = 0; i < 6; i++) {
if (data[i] != Comm_Head[i]) {
printf("Invalid header!\n");
return -1;
}
}
// 判断尾部是否正确
for (int i = data_len-4; i < data_len; i++) {
if (data[i] != Comm_End[i-data_len+4]) {
printf("Invalid tail!\n");
return -1;
}
}
// 输出数据部分
printf("Data part: ");
for (int i = 6; i < data_len-4; i++) {
printf("%02X ", data[i]);
}
printf("\n");
return 0;
}
```
该代码首先将16进制字符串转换为整数数组,然后判断头部和尾部是否正确,并输出数据部分。注意,该代码中的判断头部和尾部的方式仅适用于头部和尾部长度与给定的数组相同的情况,如果头部和尾部的长度不同,需要根据实际情况进行修改。