当前位置: 技术问答>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;
}
#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.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。