【网络编程】大端模式和小端模式

转载 2013年12月03日 20:48:31

这本来是很easy的东东,不过今天看到一段判断主机是大端模式还是小端模式的例子,和以前的常见的例子略有不同,更严密一些,故note一下:


大端:多字节值的大端存储在该值的起始位置;(老大站排头为大)

小端:多字节值的小端存储在该值的起始位置;(老小站排头为小)

例如16bit整数:0x0102,其中01即为多字节值的大端,02即为多字节值的小端。

在网络中传输的都是大端序,但具体到某台主机CPU的实现,则有可能是大端序也可能是小端序。一般X86是小端。

那么,如何通过程序来判断当前主机到底是大端还是小端呢?

常见方法:

/*判断大端还是小端, 1:小端  0:大端*/
int GetEndian()
{
    union
    {
        int a;
        char b;
    } s;
    s.a = 0x0001;
    return (1 == s.b);
}

联合体union的存放顺序是所有成员都从低地址开始存放,给s.a赋值为0x01,00为a的高端,01为a的低端,如果b==1,即a的低端位于起始位置,即小端,反之为大端。



《UNIX网络编程》(第一卷)给的方法:

/*判断大端还是小端, 1:小端  0:大端*/
int GetEndian()
{
    union
    {
        short s;
        char c[sizeof(short)];
    }un;

    un.s = 0x0102;

    if(2 == sizeof(short))
    {
        if(1 == un.c[0] && 2 == un.c[1])
        {
            printf("big-endian\n");
            return 0;
        }
        else if(2 == un.c[0] && 1 == un.c[1])
        {
            printf("little-endian\n");
            return 1;
        }
        else
        {
            printf("unknown\n");
        }
    }
    else
    {
        printf("sizeof(short) = %d\n", sizeof(short));
    }

    return 0;
}


【转自:http://my.oschina.net/renhc/blog/37130】

【网络编程】大端模式和小端模式

这本来是很easy的东东,不过今天看到一段判断主机是大端模式还是小端模式的例子,和以前的常见的例子略有不同,更严密一些,故note一下: 大端:多字节值的大端存储在该值的起始位置;(老大站排...
  • yockie
  • yockie
  • 2013年12月03日 20:48
  • 1537

socket编程 -- 大端小端区别及转换

计算机数据存储有两种字节优先顺序:高位字节优先(称为大端模式)和低位字节优先(称为小端模式)。内存的低地址存储数据的低字节,高地址存储数据的高字节的方式叫小端模式。内存的高地址存储数据的低字节,低地址...
  • y396397735
  • y396397735
  • 2016年02月13日 23:40
  • 1549

判断CPU是大端模式还是小端模式

//判断CPU是大端模式还是小端模式 #include using namespace std; //1、同一个内存段可以用来存放几种不同类型的成员, //但是在每一瞬间只能存放其中的一种,而不是同...
  • myth_HG
  • myth_HG
  • 2015年09月11日 19:53
  • 651

大端模式与小端模式的详解分析

大端序与小端序 何为大端序,小端序? 简单点说,就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了。注意...
  • bzhxuexi
  • bzhxuexi
  • 2014年08月29日 16:20
  • 2393

iOS 网络编程-socket 大端小端

iOS 网络编程-socket 大端小端
  • loveCodeNoBug
  • loveCodeNoBug
  • 2016年09月21日 17:12
  • 424

【网络编程】大端小端模式及其转换

我们知道,网络字节序是TCP/IP各层协议将字节序定义为Big-Endian。 所以,网络编程注定要使用到针对字节序的小端转大端。对大端模式和小端模式的详解见:一只博客32bit宽的数0x12345...
  • u014787301
  • u014787301
  • 2016年06月15日 09:55
  • 528

大端模式和小端模式转化

在工作中遇到一个问题,数据是以大端模式存储的,而机器是小端模式,必须进行转换,否则使用时会出问题。 一、定义: 大端模式(Big Endian):数据的高字节,保存在内存的低地址中;数据的低字节,保存...
  • szchtx
  • szchtx
  • 2015年01月18日 12:20
  • 15626

C实现当前机器模式是大端还是小端

声明:本文是在32位机器,vs2013下运行无误 大小端背景: 大小端这一词最早是来自《格列夫游记》,书中记录有一个村子,村子里的人有一个强烈的争议,关于吃鸡蛋的时候应该从小头敲破鸡蛋(Littl...
  • double_happiness
  • double_happiness
  • 2017年05月09日 17:38
  • 593

大端小端 && 网络字节序

(0)背景: 网络上的数据流是字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节?也就是说,当接收端收到第一个字节的时候,它是将这个字节作为高位还是低位来处理呢?  (1)网...
  • legend050709
  • legend050709
  • 2014年10月08日 11:02
  • 9379

大端、小端与网络字节序

大端(Big-Endian),小端(Little-Endian)以及网络字节序的概念在编程中经常会遇到,其中网络字节序(Network Byte Order)一般是指大端(Big-Endian,对大部...
  • anningzte
  • anningzte
  • 2016年08月05日 08:57
  • 5041
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【网络编程】大端模式和小端模式
举报原因:
原因补充:

(最多只允许输入30个字)