I'd love to make a program which takes certain characters(a-z,A-Z,0-9) and map them to int values but I'm unsure of how to make that portable and correct.

The problem comes from investigating the ASCII characters vs the EBCDIC characters. The ASCII characters have the characters(a-z,A-Z,0-9) in the first 128 positions and EBCDIC the characters occupying the positions 128-255.

Now here's my problem.. What type should I use(for my character) to make the program portable? Will the char type do?

What is char , signed char , unsigned char , and character literals in C? | by mohamad wael | Analytics Vidhya | Medium
The char type can be signed or it can be unsigned , this is implementation defined . The C standard defines , the minimum range that the char type can have , an implementation can define large ranges .
If the char type is unsigned , then it can only contain non negative values , and its minimum range as defined by the C standard is between 0 , and 127 . If the char type is signed , then it can contain 0 , negative , and positive values , and its minimum range as defined by the C standard , is between -127 , and 127 .
Beside the char type in C , there is also the unsigned char , and the signed char types . All three types are different , but they have the same size of 1 byte . The unsigned char type can only store nonnegative integer values , it has a minimum range between 0 and 127 , as defined by the C standard. The signed char type can store , negative , zero , and positive integer values . It has a minimum range between -127 and 127 , as defined by the C standard .
Reading the above link, I would assume the implementation would take care of the size details and I could use the code below and it would work(well would work if I compiled it for the current implementation):
Code:
#include <stdio.h>
#include <stdlib.h>

int get_index(char c) {
  switch (c) {
  case 'a':
  case 'A':
    return 0;
  case 'b':
  case 'B':
    return 1;
    /*and continues for the remaining characters*/
  default:
    return -1;
  }
}

int main(int argc, char ** argv) {
  fprintf(stdout, "%d\n", get_index('A'));
  fprintf(stdout, "%d\n", get_index('b'));
  return EXIT_SUCCESS;
}