PaulMurrayCbr:
Generally, you would read one line at a time by reading the characters into a char[] until you hit the cr/lf. Discard the cr/lf. ONe way to do this is using the strtok() function.
As you get each line, pull out the line you want - either search each line for the text "CNUM: " using the strstr() function, or just pull out the correct line (by keeping count).
Use a char pointer to point to the first character after the "CNUM: ".
Find the comma using strchr() or just by moving the pointer along.
If you have zapped the cr/lf with strtok, the the pointer will now be pointing at "34f" with a nul \0 terminator.
Use strtoi() or strtoul() as you are currently doing to get the number.
These various string manipulation functions are all described in the documentation for AVR libc.
Of course, the code is much more compact than this description.
Thank you for the direction. I believe i have been able to utilize the functions you specified, code to follow.
PaulS:
For those making an issue of age, we have 12 to 80 year olds on this forum, so age is an issue only if you are outside that range.
Heh, i was implying that my attitude towards programming in my youth was poor. likely because i wasn't grasping key concepts very well i decided early on that i didn't need to learn it... boy was i wrong.
Anyways, thank you both for the help. I've written two functions, one to read serial data into a char array, stripping the and then passing it to a function to parse. no Strings 
as for the parser it's a work in progress so be gentle... I just wanted to prove that i could use strstr() and strrchr(). My variable usage may not be efficient, so please pipe in if I'm doing something completely wrong here. Also ignore the checkConn() function, I'm going to redo it but was the first i wrote for this project so it's still in the sketch.
#include <SoftwareSerial.h>
SoftwareSerial monSerial(10, 11); //Rx, Tx
void setup() {
Serial.begin(38400);
Serial.setTimeout(500);
monSerial.begin(38400);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
}
void loop() {
checkConn();
Serial.print("AT+CNUM?\r\n");
delay(100);
readSer();
delay(5000);
}
void readSer() {
const int buffSize = 50; //Set buffer size
char sData[buffSize]; //Array for storing serial data
char sChar; //Character read from serial
int len =0; //length of what's in buffer
while(Serial.available() > 0) //only read if data
{
sChar = Serial.read(); //Read it
if ((sChar == '\r') || (sChar == '\n')) {
//EOL
if (len > 0) {
sParse(sData);
}
len = 0;
}
else {
if (len < buffSize) {
sData[len++] = sChar; //append recieved char to array
sData[len] = '\0'; // append null terminator to end
}
}
}
}
void sParse(char *msg) {
const char * CNUM = "+CNUM: 0,";
char * p;
int ID;
p = strstr(msg, CNUM);
if (p) {
char *ISSI;
ISSI = strrchr(p, ',');
ISSI++;
ID = strtoul(ISSI, NULL, 16);
monSerial.println(ID);
}
}
void checkConn() {
String serData;
digitalWrite(LED_BUILTIN, LOW);
int serConn = 0;
while (serConn ==0) {
Serial.print("AT\r\n");
delay(100);
serData = Serial.readString();
//monSerial.print(serData);
if (serData.indexOf("OK") > 0) {
//Set LED on
digitalWrite(LED_BUILTIN, HIGH);
//Put modem in advanced mode
Serial.print("AT+PIMODE=1\r\n");
serData = Serial.readString();
//monSerial.print(serData);
serConn = 1;
}
}
}