C++
x
33
1
2
3
4
size_t convert_hex(uint8_t *dest, size_t count, const char *src) {
5
size_t i = 0;
6
int value;
7
for (i = 0; i < count && sscanf(src + i * 2, "%2x", &value) == 1; i++) {
8
dest[i] = value;
9
}
10
return i;
11
}
12
13
size_t convert_hex_inv(char *dest, size_t count, const uint8_t *src) {
14
size_t i = 0;
15
for (i = 0; i < count && sprintf(dest + i * 2, "%02X", src[i]) == 2; i++);
16
return i;
17
}
18
19
int main(void) {
20
const char* input = "02AFA12534";
21
size_t len;
22
uint8_t data[128];
23
char data_back[128];
24
size_t i;
25
len = convert_hex(data, sizeof(data), input);
26
printf("data =");
27
for (i = 0; i < len; i++) printf(" %02" PRIX8, data[i]);
28
putchar('\n');
29
convert_hex_inv(data_back, len, data);
30
printf("data_back = %s\n", data_back);
31
return 0;
32
}
33
$ g++ prog.cc -Wall -Wextra -std=c++11 -pedantic
Start
prog.cc: In function 'size_t convert_hex(uint8_t*, size_t, const char*)': prog.cc:7:53: warning: format '%x' expects argument of type 'unsigned int*', but argument 3 has type 'int*' [-Wformat=] 7 | for (i = 0; i < count && sscanf(src + i * 2, "%2x", &value) == 1; i++) { | ~~^ ~~~~~~ | | | | | int* | unsigned int* | %2x
data = 02 AF A1 25 34 data_back = 02AFA12534
0
Finish