我是靠谱客的博主 冷静月亮,最近开发中收集的这篇文章主要介绍大尾端 小尾端和 htons函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

提到体系结构时,经常遇到大小尾端的概念,这里做个总结。
    big endian:大尾端,也称大端(高位)优先存储。
    little endian:小尾端,也称小端(低位)优先存储。
   如下00000000 00000000 00000000 00000001的存储
       
    大尾端: 00000000 00000000 00000000 00000001
           addr+0    addr+1     addr+2   addr+3     //先存高有效位(在低地址)
    小尾端: 00000001 00000000 00000000 00000000
           addr+0    addr+1     addr+2   addr+3     //先存低有效位(在低地址)

   故要判断机器的体系结构是大尾端还是小尾端,以下程序可以完成任务:

#include <</span>stdio.h>
int main()
{
    int tt = 1;
    char *c = (char*)(&tt);
    if(*c == 1)
    {
        printf("litte endiann");
    }
    else
    {
        printf("big endiann");
    }
    return 0;
}

在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序。

在Intel机器下,执行以下程序

int main()
{
   printf("%d /n",htons(16));
      return 0;
}

得到的结果是4096,初一看感觉很怪。
解释如下,数字16的16进制表示为0x0010,数字4096的16进制表示为0x1000。 由于Intel机器是小尾端,存储数字16时实际顺序为1000,
存储4096时实际顺序为0010。因此在发送网络包时为了报文中数据为0010,需要经过htons进行字节转换。如果用IBM等大尾端机器,则没有这种字节顺序转换,但为了程序的可移植性,也最好用这个函数。

另外用注意,数字所占位数小于或等于一个字节(8 bits)时,不要用htons转换。这是因为对于主机来说,大小尾端的最小单位为字节(byte)。


16    -  00000000 00001000 
4096 - 00001000 00000000


最后

以上就是冷静月亮为你收集整理的大尾端 小尾端和 htons函数的全部内容,希望文章能够帮你解决大尾端 小尾端和 htons函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部