簡約的網路位元組序處理

來源:互聯網
上載者:User
實現下載: inttypes.txt   

處理網路程式的位元組序,是件非常簡單的事,但每次使用時,都顯示調用ntohl之類的轉換,仍是一件麻煩的事。怎樣做更簡單了?只需要定義出各種網路位元組序的類型即可,而這些類型和主機位元組序相容。標準的網路位元組序是大位元組序,在當今小位元組序橫行的時代,建議以小位元組序作為網路位元組序,只要通訊雙方約定好,效果是一樣的,但會省去很多轉換,節省了CPU。在定義用於網路通訊的struct時,就可應用網路位元組序類型了,一切暗箱操作,對使用者透明,用起來就簡單了,下面舉個例:struct Int16 // 實際操作時,可以定義成模板類,這樣不用為每一個類型都去寫一片了{public:    Int16()     :_m(0)    {    }    Int16(int16_t m)    {        // 將m轉換成網路位元組序,這裡網路位元組序可能是小位元組序,也可能是大位元組序,由編譯宏控制        _m = f(m);     }    Int16& operator =(int16_t m)    {        _m = f(m);    }    operator int16_t() const    {        return 
f(_m) ; // 轉回成主機位元組序    }private:    int16_t _m;};訊息定義變成:#pragma pack(4)struct Message{    Int16 a1;    Int16 a2;    Int32 b;    Int32 c;};#pragma pack()Message* msg = new Message;msg->a1 = x;msg->a2 = y;msg->b = z;msg->c = 0;// 不用做位元組序轉換了socket->send(msg, sizeof(Message));Message msg;socket->recv(&msg, sizeof(Message));int16_t a1 = msg.a1;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.