Separar un char en dos variables sin usar String

Hola amigos del foro pido nuevamente su ayuda, estoy tratando de partir una arreglo dentro de el char packetBuffer[8];
es decir separar los primeros 3 caracteres, convertirlos a int y guardarlos en la variable potencia y luego
guardar los últimos 3 caracteres, convertirlos a int y guardarlos en la variable dirección, pero sin la necesidad de convertir a String

//Con el siguiente código logro lo anterior, pero quisiera saber si es posible lograrlo sin tener que //convertir a String. una de las ventajas es que siempre voy a recibir exactamente 6 caracteres, no requiero delimitador ya que siempre voy a necesitar los primeros 3 en una variable y los últimos 3 en otra

char packetBuffer[8];
String data;
int  potencia, direccion;

void loop{

int packetSize = Udp.parsePacket();

if(packetSize) {

Udp.read(packetBuffer,packetSize);

data=(packetBuffer);                                
potencia  = data.substring(0,3).toInt();             
direccion = data.substring(3,6).toInt();

  }

}

Si ambas cifras están consecutivas, se nos complica más la situación. Si estuvieran separados por un caracter (que no sea número, obviamente), es posible hacerlo.

Asignas 8 bytes al buffer del paquete, así que es posible.

Asumiendo que las cifras siempre serán de tres caracteres, y están separadas por algún otro caracter; sin String esta sería la forma de proceder:

Udp.read(packetBuffer,packetSize);

packetBuffer[7] = 0; // No sé si este paso es redundante...
packetBuffer[3] = 0; // Así es como vamos a separar las cifras; por eso es importante que haya un espacio de por medio
potencia = atoi(packetBuffer); // Procese los tres primeros digitos
direccion = atoi(packetBuffer + 4);  // Lo mismo, pero 4 bytes más adelante (lo que resta)

gracias por tu ayuda amigo probé tu código y funciona perfectamente , una pregunta peor no se si pudieses explicarme que función tiene el signo + y el = 0 , de antemano gracias

packetBuffer[7] = 0; // No sé si este paso es redundante...
packetBuffer[3] = 0; // Así es como vamos a separar las cifras; por eso es importante que haya un espacio de por medio

Cero se usa como terminador de una cadena de caracteres. Al colocarlo en dos puntos, nos aseguramos que atoi termine analizando exactamente de tres en tres caracteres.

direccion = atoi(packetBuffer + 4);  // Lo mismo, pero 4 bytes más adelante (lo que resta)

Es el mismo packetBuffer, solo que le estoy indicando que proceda a partir del 4to byte (se omiten los tres primeros digitos y el terminador de esta parte).