tu as de petites erreurs, voici un correctif (je ne me suis pas préoccupé des cast) :
ma fonction()
{
char* chaine_a_envoyer;
int position = 0;
memcpy((void*)chaine_a_envoyer, &a, sizeof(short) ); // attetion pas de & !!! chaine_a_envoyer est un pointeur
position += sizeof(short);
memcpy((void*)&chaine_a_envoyer[position], &b, sizeof(long) ); // là oui il faut le &. chaine_a_envoyer[sizeof(short)] est un char
// attention b est un long !!!
position += sizeof(long);
memcpy((void*)&chaine_a_envoyer[position], &c, sizeof(float) );
position += sizeof(float);
...
}