int yy=htons(6001);//yy=28951
int pp=ntohs(6001);//pp==28951int nn=htons(28951);//nn=6001
int nnn=ntohs(28951);//nnn=6001这么看来htons和ntohs好象没区别了?疑惑ing

解决方案 »

  1.   

    htons 主机字节序--〉网络字节序
    ntohs 网络字节序-->主机字节序
    说白了,就是字节从高到低排列,还是从低到高排列
    无论哪种排列,只要一转换,必定是另一种排列。负负得正的道理总明白吧 
    用法没区别.
    区别在于原始数据是什么字节序 。你如何解释它 。
      

  2.   

    谢谢楼上的讲解,但我还是不明白,htons和ntohs是两种不同的字节排列顺序,但为什么转换同一个数字得到两种不同结果呢,不明白你所说的"负负得正"是指的什么.
      

  3.   

    12  -> 21
    21  -> 12
    就是把16位数的两个字节颠倒一下
    两个函数应该是同样的操作
    只不过ntohs如果参数已经是host byte order,就不转换了
    htons: Host byte order To Net byte order
    是一种转换动作,而不是名词 
      

  4.   

    另外:有部分系统的hton与ntoh系列函数不是简单的转换字节序,而是比较“智能”的判断当前主机的字节序,如果与网络序一致则不转换,否则转换。该判断可能是在编译期决定的。还有一部分系统允许应用程序注册自己的转换函数(类似于hook)。