htons和ntohs实际上是两个相同的函数,如果主机与网络字节顺序不同,颠倒过来(按字节,参数是u_short,两个字节) 0x1234---->0x3412 否则不变。 就是说htons和ntohs都是将0xabcdefgh变为0xghefcdab 0xabcd变为0xcdab
#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; } 最佳答案
|
|
来自: angelbrian > 《囧~Linux》