網絡字節序和主機字節序


版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/Tao_Ba/article/details/80713192

網絡字節序跟主機字節序有什么區別,這是我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

原文地址:https://blog.csdn.net/Tao_Ba/article/details/80713192


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM