Bonjour à tous!

J'ai une fonction qui lit de la mémoire dans des registres et en renvoie le contenu. Cette fonction a cette forme simplifiée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
bool GetRegisterValue(const unsigned short &rusAddress, unsigned char *pucData, const unsigned long &rulSize);
rusAddress est l'adresse du registre dans la mémoire
pucData est un pointeur sur la zone mémoire qui va recevoir les données lues
rulSize est la taille qui doit être lue en octets (taille du registre)

Cette fonction a pour but d'être générique dans le sens où elle peut lire des registres de 8, 16 ou plus bits.

Mon problème, c'est que je veux lire un registre de 16 bits, mais je dois passer un char*. Je fais donc un reinterpret_cast de mon short en char* et indique la taille 2.
La lecture ne pose pas de problème, j'ai bien le bon retour, sauf que les 2 octets du short sont inversés (par rapport à la lecture via mon outil de validation).

J'en déduis donc que j'ai un problème d'endianess. Est-ce que ça vient de mon reinterpret_cast? Comment faire autrement? Existe-t-il des fonctions en C++ comme htonl()/ntohl() pour winsocks (je développe sous VS2003)?

NB: mon char fait 1 octet et mon short en fait 2.

Merci d'avance