简约的网络字节序处理

简介: 实现下载: inttypes.txt   处理网络程序的字节序,是件非常简单的事,但每次使用时,都显示调用ntohl之类的转换,仍是一件麻烦的事。怎样做更简单了?只需要定义出各种网络字节序的类型即可,而这些类型和主机字节序兼容。
实现下载: text.gif 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;
相关文章
|
4月前
|
Linux C语言 Windows
C语言 网络编程(六)字节序
本文介绍了在不同操作系统中查看IP地址和网络状态的方法,包括Windows下的`ipconfig`与Linux下的`ifconfig`命令,并详细解析了网络字节序转换函数。通过`inet_aton()`和`inet_addr()`可将IP字符串转换为网络字节序,而`inet_ntoa()`则实现相反操作。此外,还提供了`htons()`与`ntohs()`等函数进行主机字节序与网络字节序之间的转换,并附带示例代码帮助理解。
|
8月前
网络字节序和主机序(大端和小端)详细解释--通过封装IP协议头去理解网络字节序
网络字节序和主机序(大端和小端)详细解释--通过封装IP协议头去理解网络字节序
710 1
|
8月前
了解网络字节序
了解网络字节序
66 1
|
8月前
|
存储 网络协议
网络编程之字节序
网络编程之字节序
55 0
|
8月前
网络编程之 字节序和深入理解bind()函数
在上一篇博客里,大家也许会对htons()感到疑惑吧,其实就是字节序的转换,所以这篇博客我们就来详细的解释一下什么是字节序。
112 0
|
存储 网络协议 Unix
socket | 网络套接字、网络字节序、sockaddr结构
socket | 网络套接字、网络字节序、sockaddr结构
146 0
|
存储 网络协议 编译器
字节序,主机字节序与网络字节序
是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。在计算机中是以字节为单位,每个地址对应一个字节,一个字节8bit。在C中,除了8bit的char以外,还有16bit的short,32位的int,64位long,当然具体要由编译器决定,可以通过sizeof来获取不同类型在内存中占用的字节数。在计算机系统中,当物理单位的长度大于1个字节时(所以char数据就不用区分字节序),就要区分字节顺序。常见的字节顺序有两种:大端和小端,当然还有其他字节顺序,但不常见,例如Middle Endian,通俗的讲,字节序就是cpu对内存中进行存储的顺序(以字节为单位进行存取)
241 0
|
存储 网络协议 芯片
清晰讲解LSB、MSB和大小端模式及网络字节序
清晰讲解LSB、MSB和大小端模式及网络字节序
2019 0
|
存储 网络协议 Unix
【网络篇】第四篇——网络字节序
【网络篇】第四篇——网络字节序
【网络篇】第四篇——网络字节序
|
网络协议 网络架构
计算机网络:IP、端口、网络通信协议、TCP/IP五层模型、字节序
计算机网络:IP、端口、网络通信协议、TCP/IP五层模型、字节序
153 0
计算机网络:IP、端口、网络通信协议、TCP/IP五层模型、字节序