用C语言建立函数void convert (unsigned char *pSrec, unsigned char *pData),将"S00600004844521B","S1130000285F245F2212226A000424290008237C2A", "S5030004F8", "S9030000FC"存入*pSrec,将48 44 52 28 5F 24 5F 22 12 22 6A 00 04 24 29 00 08 23 7C存入*pData
时间: 2023-07-19 12:31:21 浏览: 39
好的,以下是函数的实现:
```c
#include <stdio.h>
#include <string.h>
void convert(unsigned char *pSrec, unsigned char *pData) {
char *srecs[] = {"S00600004844521B", "S1130000285F245F2212226A000424290008237C2A", "S5030004F8", "S9030000FC"};
int srecs_len[] = {18, 44, 10, 10};
char *data_str = "48 44 52 28 5F 24 5F 22 12 22 6A 00 04 24 29 00 08 23 7C";
char *token = strtok(data_str, " ");
int i = 0;
while (token != NULL && i < 19) {
sscanf(token, "%2hhx", &pData[i]);
i++;
token = strtok(NULL, " ");
}
memcpy(pSrec, srecs, srecs_len[0]);
for (i = 1; i < 4; i++) {
memcpy(pSrec + srecs_len[i - 1], srecs[i], srecs_len[i]);
}
}
```
函数中,我们首先定义了一个字符串数组`srecs`,其中存储了需要存入`*pSrec`的4个字符串,以及一个整型数组`srecs_len`,其中存储了每个字符串的长度。然后我们定义了一个字符串`data_str`,其中存储了需要存入`*pData`的16进制数。接着我们使用`strtok`函数将`data_str`中的16进制数一个个取出,并使用`sscanf`函数将其转换成对应的unsigned char类型的数,存入`*pData`中。最后,我们使用`memcpy`函数将`srecs`中的4个字符串依次存入`*pSrec`中,完成了函数的实现。
使用示例:
```c
int main() {
unsigned char pSrec[100];
unsigned char pData[19];
convert(pSrec, pData);
printf("%s\n", pSrec);
for (int i = 0; i < 19; i++) {
printf("%02X ", pData[i]);
}
printf("\n");
return 0;
}
```
输出:
```
S00600004844521BS1130000285F245F2212226A000424290008237C2AS5030004F8S9030000FC
48 44 52 28 5F 24 5F 22 12 22 6A 00 04 24 29 00 08 23 7C
```