Per la print basta scrivere print (numero) ci pensa lei a dividere il numero.
In ricezione leggi il primo carattere. Se é un inizio valido azzeri la variabile che hai associato a quell'inizio. Da qui verifichi se ricevi una cifra (if (isDigit(RX))RX scritto minuscolo, e forse isDigit non é corretto. Comunque é equivalente a if (rx-'0'>-1 &&rx-'0'<10)) { var=var*10+(rx-'0')}
else
Se leggi terminatore return;, visto che hai finito di scrivere quel numero
Else (quindi se non é un numero o un terminatore) allora éun errore e va risolto. Puoi scegliere se azzeri e segni l'errore o ignori.
Fai tutto questo usando una variabile di appoggio, per evitare di perdere un sacco di valori.
Inoltre per semplificare il tutto puoi farlo all'interno di una funzione Leggiseriale (byte indice), che viene chiamata dal primo carattere. Indice può essere, ad esempio inizio-'A'. Ovviamente devi inserire il richiamo in un if (rx-'A'>-1 &&rx-'A'<maxarray). Poi l'indice dice alla funzione in che pezzo dell array di ricezione scrivere. Puoi farlo solo se usi per inizio caratteri contigui.
Si capisce o ho messo troppa carne al fuoco?