字节序转换以及判断字节序

在网络信息跨主机传输过程中,不同主机的字节序问题可能不同,因此必须进行字节序的转换。

本地字节序--> 网络字节序 -->本地字节序

字节序转换函数:



htons和htonl是将本地字节序转换为网络字节序,htons是对16位整数进行转换,htonl是对32位正数进行转换,ntohs和ntohl恰好相反。

判断主机字节序和网络字节序:

  1. #include<arpa/inet.h>
  2. #include<stdio.h>
  3. //judge host endian
  4. void judge_host_endian()
  5. {
  6. short arg = 0x0102;
  7. short* ap = &arg;
  8. char* temp = (char*)ap;
  9. if(*temp==0x01)
  10. {
  11. puts("host:big-endian");
  12. }
  13. else if(*temp==0x02)
  14. {
  15. puts("host:small-endian");
  16. }
  17. }
  18. //judge net endian
  19. void judge_net_endian()
  20. {
  21. uint16_t arg = htons((uint16_t)0x0102);
  22. short* ap = &arg;
  23. char* temp = (char*)ap;
  24. if(*temp==0x01)
  25. {
  26. puts("net:big-endian");
  27. }
  28. else if(*temp==0x02)
  29. {
  30. puts("net:small-endian");
  31. }
  32. }
  33. int main()
  34. {
  35. judge_host_endian();
  36. judge_net_endian();
  37. return 0;
  38. }


所以win7是small-endian,网络字节序是big-endian。




posted @ 2015-06-11 23:11 外禅内定,程序人生 阅读(...) 评论(...) 编辑 收藏