Для sscanf
вы бы использовали %2x
вместо %02x
. Кроме того, %2x
указывает, что будет передан дополнительный аргумент int*
. Но вы передаете unsigned char*
. И, наконец, sscanf
принимает const char*
в качестве первого аргумента, поэтому нет необходимости в этом приведении.
Так что попробуйте:
int x;
sscanf((string + i), "%2x", &x);
РЕДАКТИРОВАТЬ : чтобы выяснить, почему это изменение решает проблему: в вашем коде sscanf
попытался записать sizeof(int)
байт в ячейку памяти (&x
), которая могла содержать только sizeof(unsigned char)
байты (т.е. 1 байт). Итак, вы перезаписывали определенный объем памяти. Эта перезаписанная память вполне могла быть (частью) переменной i
.