Storing HEX values in the String / Array

i need to send the value “:XXXXXABCD” via serial
where ABCD is the HEX equivalent of DEC value ranging from 0000 to 5000.

i find a code that convert the dec value to the hex and i changed a little bit to send the DEC equalent HEX value.

#define max_hex_length 4

char data_buffer[20];
int hex[4];
char speed_VFD[] = ":01062001";

void setup(){
Serial.begin(9600);
 }//end of main()


void loop(){
  int a = serial_ask();
  Serial.print("the value you entered is :"); 
  Serial.println(a);
 convert_to_hex(a); 
  display_it();
  send_vfd_speed();
}//end of loop

void convert_to_hex(int a){
 for (int i=0; i < max_hex_length;i++){

    hex[i] =  a % 16;
    a = a / 16;
  }//end of for loop()
}//end of convert_to_hex
void display_it(){
  //Serial.print("hex Equalent is : ");
  for (int j=max_hex_length - 1; j >= 0; j--){
    if (hex[j] <= 9){
      Serial.print(hex[j]);
    }
    else{
      switch(hex[j]){
      case 10 :
        Serial.print('a');
        break;

      case 11 :
        Serial.print('b');
        break;

      case 12 :
        Serial.print('c');
        break;

      case 13 :
        Serial.print('d');
        break;

      case 14 :
        Serial.print('e');
        break;

      case 15 :
        Serial.print('f');
        break;

      default :
        Serial.println("something wrong");
      }//end of switch 
    }//end of If Else Condition
   
  }//end of for loop
 Serial.println();

}//end of display_it() function


int serial_ask(){
  Serial.println("enter the Integer decimal value coverted to the HEX");

  while(!data_received()){
    //wait until full data is received
  }
  return(atoi(data_buffer));

}//end of serial_ask() fucntion

boolean data_received(){
  while(!Serial.available()){
    //wait until user enters the data
  }
  if(Serial.available()){
    static byte index = 0;
    char input = Serial.read();
    if(input != '\r'){
      data_buffer[index] =  input;
      index ++;
    }
    else {
      data_buffer[index] = 0;//terminating with NULL to make char array as string
      index = 0;
      return true;

    }//end of If Else condition

  }//end of IF condition
  return false;
}//end of data_received() function


void send_vfd_speed(){
Serial.print(speed_VFD);
display_it();
Serial.println();
}

But How can I do that using strcat() function?
to do that i have to store the hex value ABCD in a string? is there any efficient way to do that?

utoa()

Thankyou.....

But it is returning hex value as 23 how can i return value 0023

sprintf()