now uses char and signed decimal values (unsigned hex before)
using std::array