Cuando tu declaras una variable entera (sea esta como int, short, long, char, unsigned o una combinación de estas) su valor numérico se almacena como una combinación de 1's y 0's y es el mismo valor no importa si lo interpretas como decimal, hexadecimal, octal, binario u otra base que tu elijas. De modo que eso que dices de "almacenar un numero entero en base hexadecimal en una variable" no tiene sentido. Cuando por el teclado introduces un valor a una variable entera usando por ejemplo la función scanf esta por defecto lee valores en base decimal, si quieres que lo introducido se interprete en otra base tendrías que hacer una función que dada una cadena te la interpretara en la base que tu quieres y almacenara su valor en una variable. Para el caso contrario ya existe una función. Esto es, dada una variable entera, la función itoa convierte este valor a una cadena en las bases 10, 8, 16 y 2.