C'e` quacosa che non quadra.
Nell'ordine ASCII lo zero (0x30 = 48) viene prima dell'1 (0x31 = 49).
Il problema e` che il 10 viene prima del 9 (e cosi` per molti numeri con diverso numero di cifre). In tal caso devi far scrivere anche lo zero prima del 9 (si riesce con il printf/sprintf).
Non so bene cosa vuoi fare, ma credo che ti convenga tenere le hash come hash, ed ordinarle con una routine di ordinamento specifica (devi fartela tu), che va a testare il "campo" che ti interessa.