[Windows]网络到主机不工作

问题描述:

值为10240或2800(十六进制)。 TOTAL_LENGTH是未签名的短片。 0028的十进制数是40,这是我所期望的(或至少是一个合理的数值)。[Windows]网络到主机不工作

任何想法,为什么我得到0而不是40?想想自己倒过来的东西,但真的不想。 xD

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

这些是我包括的标题。

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

u_long WSAAPI ntohl(
    __in u_long netlong 
); 

结果是一个长期的,而你将其分配给短。检查它是否没有被切断。

此外,如果它是一个短,那么为什么你不使用ntohs

+0

因为,我是个白痴。 xD谢谢! – bobber205 2010-01-31 23:19:23

尝试ntohs。它是为短裤而制造的。我猜测它有所不同,因为他们为不同类型的功能而烦恼。

结合Kornel的答案,您需要了解数据的存储方式,最大的错误之一就是假设数据符合您的期望。不同的平台,不同的处理器,关键字是endianess。一些存储从高位到低位字节,其他存储从低位到高位字节。这是使用'ntohs'和家人的唯一目的。请参阅Beej这个网络编程站点的深入使用。

顺便说一句,如果你说,你可以使用它作为一个独立的函数,处理来自不同平台的具有不同字节的数据文件,你可以用它在处理之前将数据转换为右端的体系结构。它不会损害开销并保证处理数据的成功。

希望这会有所帮助, 最好的问候, 汤姆。