MQTT Strings getting messed up by substring(value.lastIndexOf(',')+1).toInt();

I'm kind of new to this and have looked everywhere I know to look.
I am having OpenHAB deliver an HSB string over MQTT. When I print just the string, it comes out perfect with three sets of numbers separated by commas. However when I use;
int StripBrightness = value.substring(value.lastIndexOf(',')+1).toInt();
it sometimes adds numbers together.

For instance, the first number comes up as "100". Great! Then it receives a number like "45" and instead of replacing "100" with "45" it returns "450". And if the next number is "7", then the integer will now read "750". Just a minute ago, it was returning 8080, so sometimes it just completely adds numbers to the front end of the original without overwriting it.
Not sure how else to describe it, but its driving me insane, and I don't see other MQTT or Arduino users with this issue.

Here is the callback function that contains the coding;

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();

  if (String(topic) == "KitchenStripHSB") {

    String value = String((char*)payload);

    int StripHue = value.substring(0,value.indexOf(',')).toInt();
    int StripSaturation = value.substring(value.indexOf(',')+1,value.lastIndexOf(',')).toInt();
    int StripBrightness = value.substring(value.lastIndexOf(',')+1).toInt();
    Serial.println (StripHue);
    Serial.println (StripSaturation);
    Serial.println (StripBrightness);

    getRGB(StripHue,StripSaturation,StripBrightness,rgbw_colors);

    Serial.print("Red; ");
    Serial.println(rgbw_colors[0]); 
    Serial.print("Green; ");
    Serial.println(rgbw_colors[1]); 
    Serial.print("Blue; "); 
    Serial.println(rgbw_colors[2]);
    Serial.print("White; "); 
    Serial.println(rgbw_colors[3]);
    
    analogWrite(pinColorR, rgbw_colors[0]);
    analogWrite(pinColorG, rgbw_colors[1]);
    analogWrite(pinColorB, rgbw_colors[2]);
    analogWrite(pinColorW, rgbw_colors[3]);
  }
  Serial.println();
}

Any help would be greatly appreciated.

I'm using the following;
ESP8266WiFi.h
PubSubClient.h
on a NodeMCU board.

Thanks!

Have you considered 3 pieces of data sent with differing topics and processing those topics individally?

/Home/R/
/Home/G/
/Home/B/

Good job with using code tags with your first post.

What exactly is the complete the received message?

for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
void callback(char* topic, byte* payload, unsigned int length) {

Given that payload is a byte array, I'm certain there are reliable ways to add a null terminator(if its not there already) and parse the received comma separated message with strtok. Then use atoi to get the integer values.