Well one of us doesn't understand something. The modification I made to the code would result in the value 0xff being sent as 0xff and not as 0x46 0x46. The unmodified program converts the hex values to a string with the following code:
for (i=0; i<strlen(send_data); i++)
	sprintf(temp, "%X ", send_data);
	strcat(hexstring, temp);
so if in your program you are doing this, then you need to stop doing that in order for the send to send what you want it to send.

Originally, I have some hex values in an array...
OK, so where does it get converted from those hex values to string format? Find that code and remove it, and this will solve the problem.