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