Da bist du wie so oft gleich auf die Limitationen der primitiven Arduino String Klasse gestoßen. Man kann einfach kaum was damit machen. In Standard C geht das ganz einfach mit strtoul:
http://www.cplusplus.com/reference/cstdlib/strtoul/
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#gaea44aa48bda8261f794dcb2d1e7ab2b2
Dabei kann man als dritten Parameter die Basis übergeben. Also 16 für Hex.
Mit C Strings ist aber auch das einlesen schwerer. Ein Kompromiss ist dass du toCharArray() verwendest um das String Objekt in einen C String zu wandeln. Schau dabei genau an wie das funktioniert:
Du musst da bei ein entsprechend großes Array als Parameter übergeben. Der muss eins größer als die Anzahl der Zeichen sein.
Dann kannst du den C String in eine Zahl konvertieren.