zoukankan      html  css  js  c++  java
  • 简约的网络字节序处理

    实现下载: 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;
  • 相关阅读:
    Key-Value Memory Network
    Deep Mask Memory Network with Semantic Dependency and Context Moment for Aspect Level Sentiment Clas
    Deep Memory Network在Aspect Based Sentiment方向上的应用
    Deep Memory Network 深度记忆网络
    Self Attention 自注意力机制
    Attention基本公式及其变种
    *端策略优化算法(PPO)
    Policy Gradient 算法
    一本通 农场派对
    A
  • 原文地址:https://www.cnblogs.com/aquester/p/9892022.html
Copyright © 2011-2022 走看看