网络字节序跟主机字节序有什么区别

网络字节序跟主机字节序有什么区别,这是我16年9月份校招面试腾讯被问到的一个问题,也是Linux服务器开发岗常考的面试题。

字节序分为大端字节序和小端字节序

  • 大端字节序是指一个整数的高位字节(32-31bit)存储在内存的低地址处,低位字节(0-7bit)存储在内存的高地址处。
  • 小端字节序是指一个整数的高位字节(32-31bit)存储在内存的高地址处,低位字节(0-7bit)存储在内存的低地址处。

现代PC大多采用小端字节序,所以小端字节序又被称为主机字节序。
大端字节序也称为网络字节序。

即使是同一台机器上的两个进程(比如一个由C语言,另一个由Java编写)通信,也要考虑字节序的问题(JVM采用大端字节序)。

可编写 byteorder.cpp 判断机器字节序

void byteorder()
{
    union
    {
        short value;
        char union_bytes[sizeof(short)];
    }test;
    test.value = 0x0102;

    if (sizeof(short) == 2)
    {
        if (test.union_bytes[0] == 1 && test.union_bytes[1] == 2)
            cout << "big endian" << endl;
        else if (test.union_bytes[0] == 2 && test.union_bytes[1] == 1)
            cout << "little endian" << endl;
        else
            cout << "unknown" << endl;
    }
    else
    {
        cout << "sizeof(short) == " << sizeof(short) << endl;
    }

    return ;
}

该程序在我的ubuntu跟win10下执行结果都是 little endian

完整源代码放于github

猜你喜欢

转载自blog.csdn.net/tao_ba/article/details/80713192
今日推荐