2010-01-31 5 views
0

La valeur est 10240 ou 2800 en hexadécimal. TOTAL_LENGTH est un court-métrage non signé. 0028 en décimal est 40 ce qui est ce que j'attends (ou est au moins une valeur raisonnable).[Windows] Net à l'hôte ne fonctionnant pas

Des idées pour lesquelles je reçois un 0 au lieu d'un 40? Penser à inverser les bits moi-même, mais ne veux vraiment pas. xD

unsigned short total_length = ntohl(ipData->TOTAL_LENGTH); 

Ce sont les en-têtes j'inclus.

#include <winsock2.h> 
#include <ws2tcpip.h> 

Répondre

1
u_long WSAAPI ntohl(
    __in u_long netlong 
); 

Le résultat est une longue, et vous affectez à un court. Vérifiez s'il ne se coupe pas.

En outre, si c'est un court, alors pourquoi n'utilisez-vous pas ntohs?

+0

Parce que, je suis un idiot. xD Merci! – bobber205

0

essayez ntohs. Il a été construit pour les courts métrages. Je devine que cela fait une différence puisqu'ils ont pris la peine de faire des fonctions pour les différents types.

0

En conjonction avec la réponse de Kornel, vous devez être mis au courant de la façon dont les données sont stockées, la grande erreur est de supposer que les données sont comme vous le souhaitez. Différentes plates-formes, différents processeurs, le mot-clé est endianess. Certains sont stockés de haut en bas octet, les autres sont stockés de faible à élevé octet. C'est le seul but de l'utilisation de «ntohs» et de la famille. Voir ici pour une utilisation approfondie de Beej, le site de programmation réseau. Incidemment, vous pouvez utiliser cela comme une fonction autonome si vous disiez, en traitant un fichier de données d'une plate-forme différente qui a une endianess différente, vous pouvez utiliser cela pour convertir les données à l'architecture droite avant le traitement. Cela ne nuit pas aux frais généraux et garantit le succès du traitement des données.

Espérons que cela aide, Cordialement, Tom.

Questions connexes