Isn’t the issue that
strcpy((char *) tx_buffer, (char)100); // I want to send value 100
Is copying not the value 100 but string which starts at address 100 and continues (could go many kilobytes) until it reaches null termination \0 ?
This should just work fine:
tx_buffer[0] = 100;