That’s because you use serial/Serial monitor. You don’t input 1, you input ‘1’, the ASCII char for a 1 character. And that has the value of 49 in decimal. If you only want numbers between 0 and 9 it’s an easy fix.
A "1" on your keyboard is an ASCII "49". That is how characters are stored internally on a computer. You could not only solve your problem, but learn a bunch by reading up on ASCII. Serial.print() is an overloaded function, it adapts itself to the datatype that you pass to it. You passed it a uint8_t, so it printed the value as an unsigned 8 bit integer, not an ASCII character.
The atoi() function converts from numbers like ASCII "1" to the numerical value 1. Or "123" to 123.
There is no such thing as a "hex array". Not in C. Hex is a human readable format for binary data. You can type, read and think in hex, but the computer stores everything in pure binary.
Numbers are not hex or decimal. Nether are they binary, roman numerals, or Sumerian cuneiform. Numbers are numbers. Hex is simply the way we write them down.