分享

htons()/ntohs()函数使用?具体请看代码

 angelbrian 2011-07-23
#include <stdio.h>
#include <arpa/inet.h>
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-endian\n");
else if(un.c[0]==2&&un.c[1]==1)
printf("1littel-endian\n");
}
else
{
printf("sizeof(short)=%d\n",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-endian\n");
else if(nn.c[0]==2&&nn.c[1]==1)
printf("2littel-endian\n");
}
else
{
printf("sizeof(short)=%d\n",sizeof(short));
}
return 0;
}
最佳答案
htons和ntohs实际上是两个相同的函数,如果主机与网络字节顺序不同,颠倒过来(按字节,参数是u_short,两个字节)
0x1234---->0x3412
否则不变。
就是说htons和ntohs都是将0xabcdefgh变为0xghefcdab
0xabcd变为0xcdab

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多