Учитывая, что стандартный Пролог поддерживает шестнадцатеричные числа, если под строкой вы подразумеваете атом Пролога:
parse_hex(H, N) :-
atom_concat('0x', H, HexaAtom),
atom_codes(HexaAtom, HexaCodes),
number_codes(N, HexaCodes).
Если у вас действительно есть строка вместо атома, обратитесь к документации Prolog по ее преобразованию в атом. Например. SWI-Prolog предоставляет atom_string/2
двунаправленный встроенный предикат.
Пример звонка:
?- parse_hex('ff', N).
N = 255.