По сути, вам нужно прочитать первые 8 символов строки и преобразовать их в десятичный формат. Для этого есть утилиты. Например:
const char * data = "887f76b18226baac";
char buff[9] = {0};
unsigned long x = 0, y = 0;
sscanf(data, "%8s", buff);
x = strtoul(buff, NULL, 16);
sscanf(data + 8, "%8s", buff);
y = strtoul(buff, NULL, 16);
Поймите, что я исключил все проверки ошибок там. И sscanf, и strtoul возвращают значения ошибок (или предоставляют механизмы для проверки ошибок). В случаях, когда вы конвертируете значения, целесообразно проверить эти случаи ошибок.
Редактировать: Как уже упоминалось в комментариях, вы не сможете сохранить эти значения в массиве символов. Вам нужно иметь массив с правильным типом данных (для моего примера вы бы использовали длинный массив без знака [16])