当前位置:  技术问答>linux和unix

ntohs()/htons()函数问题?具体看下面简单代码

    来源: 互联网  发布时间:2016-06-17

    本文导语:  #include  #include  union {  short s;  char c[sizeof(short)]; }un,nn; int main() {  un.s=0x0102;  if(sizeof(short)==2)  {   if(un.c[0]==1&&un.c[1]==2)    printf("1big-endiann");    else if(un.c[0]==2&&un.c[1]==1)    printf("1littel-endiann");   }   else  ...

#include 
#include 

union {
 short s;
 char c[sizeof(short)];
}un,nn;

int main()
{
 un.s=0x0102;
 if(sizeof(short)==2)
 {
  if(un.c[0]==1&&un.c[1]==2)
   printf("1big-endiann"); 
  else if(un.c[0]==2&&un.c[1]==1)
   printf("1littel-endiann"); 
 } 
 else
 {
  printf("sizeof(short)=%dn",sizeof(short));
 }

 nn.s=htons(un.s); 注意:用这句和下面注释掉的语句输出结果一样结果一样。为什么?
 //nn.s=ntohs(un.s);
 if(sizeof(short)==2)
 {
  if(nn.c[0]==1&&nn.c[1]==2)
   printf("2big-endiann"); 
  else if(nn.c[0]==2&&nn.c[1]==1)
   printf("2littel-endiann"); 
 } 
 else
 {
  printf("sizeof(short)=%dn",sizeof(short));
 }
 return 0;

|
htohs和ntohs的算法是一样的

在大端机器上,什么都不做(空宏)
在小端机器上,就将高低字节进行转换

所以无论调用什么,在你机器上都会做小端到大端的转换

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 对同一个值,做了2次ntohs之后,等于没变化


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3