通信过程(三)跨字节位段的网络传输过程(图)

通信过程(三) 跨字节段的网络传输过程

讲解了网络传输中字节序相关的一些概念,以及大端通信中常用的一些C语言处理方法。基于前面的概念,本文讲了一个不常见的通信过程,在理解这个过程中,相信网络通信中涉及大小端的问题都可以轻松处理。

本文以实际示例为基础,因为实际示例更容易理解。

在解释例子之前,我想说几点我总结的:

1、 这个跨越1字节的位域定义类似于一个通用公式,即使不是跨字节的位域(多字节)c语言实现图像处理,也可以这样实现。

2、 跨越字节的位域并不意味着我将超过 1 个字节的位域定义为跨越字节。比如定义一个32位的位段(u32 8:8:8:8)c语言实现图像处理,虽然整体是32位,但是每个位段只有8位,位段之间没有1个字节.

下面是一个u32(u32 6:8:18))的跨字节位段的定义和通信过程的例子:

1、我们先看C语言的定义方法:很容易理解,跨字节位段的size end的定义不同,size end的定义正好相反. 最后使用了一个共同的body,整个bit segment和u32d共享一块内存。这最终提高了字节顺序。如下所示:

图片[1]-通信过程(三)跨字节位段的网络传输过程(图)-老王博客

2、 那么看看这个定义方法在big-endian模式下的内存排序:相信按照图片的排列就很容易理解了。下图中的两个表是一样的。对比一下,上表就不好理解了。之所以给出这个对比,是为了后面通过第一张表更好的理解传输过程。

3、 同理可以画出小端模式下C语言定义的内存的排列方式:(这个和上图一定要仔细阅读理解,区别要仔细对比)

4、 看了上面两张图,整个传输过程就很容易理解了:

5、 根据上图的传输过程,我们可以写出C代码的框架:

整篇文章已经介绍到这里了。相信在了解了这些过程之后,以后再看一些网络协议的时候会更容易理解。水平有限,如有错误请指正。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论