Esagerati!
La conversione è alla portata di gambas, come per quasiasi altro linguaggio, occorre solo sapere la logica dell'esadecimale.
Tenendo presente che una cifra esadecimale rappresenta un valore compreso tra 0 e 15 (0 compreso), e che quindi per passare alla cifra successiva (maggiore) basta moltiplicare per 16, a questo punto si può fare in modo inverso.
Ora, capire da dove partire... o prendere e calcolare la cifra direttamente sul valore binario, se presente... oppure, se abbiamo una stringa ASCII (es. FF00), è necessario analizzare i singoli caratteri. La cosa è piuttosto semplice in tutti e due i casi.
Se teniamo presente che le cifre da 0 a 9 esadecimali sono esattamente corrispondenti a 0/9 decimali, e che i caratteri esadecimali da A a F sono la rappresentazione dei valori decimali da 10 a 15, credo sia facile capire come convertirli...
Se stiamo trattando un valore rappresentato come stringa, basta prendere il codice Asc(mid(value,n,1)), toglierli il valore 48 (il carattere "0"), e abbiamo il primo valore converito in decimale.
Se iniziamo a leggere la stringa esadecimale da sinistra verso destra (ovvero dalla più grane alla più piccola), dobbiamo sommare ogni valore convertito, moltiplicando però prima il valore precedente per 16.
Esempio:
s = "FA0C"
s = Upper(s) 'devono corrispondere esattamente alla tabella ASCII
value = 0
'loop estrazione caratteri
FOR n = 0 TO Len(s)
'prendo il carattere
c = Mid(s,n,1)
'ne estraggo il codice ASCII che, ricordo, corriponderà
'ai valori 0-9 A-F, come da sequenza nella tabella ASCII
v = Asc(c)
'elimino 48 per portarlo a dimensione numerica
v = v - 48
'moltiplico il valore precedente per 16,
'ovviamente la prima volta sarà 0
value = value * 16
'ci aggiungo il valore convertito
value = value + v
NEXT
RETURN value
Questo è ovviamente un esempio, e per il momento non ho modo di fornire un esempio di codice reale, dato che sono fuori casa, ma spero vi sia utile, anche come teoria.
Ciao!