Conversion des valeurs flottantes du gros boutiste au petit boutiste
Est-il possible de convertir float
s du plus grand au plus petit-boutiste? J'ai un big endian valeur à partir d'une plate-forme PowerPC que j'envoie via TCP à un processus de Windows (little endian). Cette valeur est un float
mais quand je memcpy
la valeur dans un Win32 type float et ensuite appeler _byteswap_ulong
sur cette valeur, j'ai toujours 0.0000?
Ce que je fais mal?
source d'informationauteur Blade3
Vous devez vous connecter pour publier un commentaire.
simplement inverser les quatre octets œuvres
J'ai trouvé quelque chose à peu près comme ceci il y a longtemps. C'était bien pour riremais ingérer à vos risques et périls. Je n'ai même pas compilé:
Ici est une fonction peut inverser l'ordre des octets de tout type.
Ne pas memcpy les données directement dans un type float. Le garder comme char de données, échanger les octets et puis le traiter comme un flotteur.
Il pourrait être plus facile d'utiliser le ntoa et des fonctions liées à convertir à partir du réseau et de l'ordinateur hôte à partir de l'hôte de réseau..l'avantage c'portable. Ici est un lien vers un article qui explique comment faire cela.
Cela devrait fonctionner. Pouvez-vous poster le code que vous avez?
Cependant, si vous vous souciez de la performance (peut-être que vous ne le faites pas, dans ce cas, vous pouvez ignorer le reste), il devrait être possible d'éviter memcpy, soit en chargeant directement dans l'emplacement cible et la permutation des octets, ou à l'aide d'un swap qui ne l'échange lors de la copie.
Une belle manière de faire de la valeur est d'utiliser struct.pack/unpack.
Vous pouvez utiliser le bouton ">" de caractères dans le format pour indiquer que les octets sont dans le sens inverse (big endian).
de sortie: