模拟计算机网络中的零比特填充
概述:
学网络的时候,学到一个零比特填充法。是用来保证数据在网络中传输的时候有一个比较稳妥的方式不产生错误。用零比特填充是因为我们要让7EH(01111110)这个16进制数据表示数据的结尾,正因为如此,所以我们不能让数据本身包含这个7E数据,因为这样的话,数据就会被认为是结束。我们采用的方法是只让连续的5个‘1’在一起,当有6个‘1’的时候,在第5个‘1’和第6个‘1’之间填充一个‘0’,下面笔者就这一个方法用代码的方式来实现。由于只是想实现这个基本功能,所以就不在文件末尾添加7EH结束标志了。。。。
一、填充(从终端发出,形成传输文件)
CODE:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX 100000 // The maximum length of binary stringint main()
{FILE* fp;fp = fopen("input.txt", "r");if (fp == NULL){printf("Sorry, your file is NULL. I can not to open it...\n");return 1;}char temp, bin[MAX];memset(bin, 0, sizeof(bin)); // initizal this array bin[] to sure finsh.int i;temp = fgetc(fp); // get file informationfor (i = 0; temp != EOF; ++i){bin[i] = temp;temp = fgetc(fp);}int len = strlen(bin);printf("The original characters of the flow:");for (i = 0; i < len; ++i){printf("%c", bin[i]);}printf("\nbin len = %d\n", len);/* 0 bit filling */char aux[MAX]; // auxiliary arraymemset(aux, 0, sizeof(aux));int m, flag; // flag is used to record the number of "1" states for (i = 0, m = 0, flag = 0; i < len; ++m){if (bin[i] == '0'){flag = 0; // Flag to resetaux[m] = bin[i];++i;}else{++flag; // flag states chanageif (flag != 6){aux[m] = bin[i];++i;}else{aux[m] = '0';flag = 0;}}}len = strlen(aux);printf("After filling the character of flow:");for (i = 0; i < len; ++i){printf("%c", aux[i]);}printf("\nbin len = %d\n", len);fclose(fp);return 0;
}
input.txt文件可以如下:
1011010111001111111011111101111100001111101110
二、解除(到达终端,解密成信息文件)
CODE:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX 100000 // The maximum length of binary stringint main()
{FILE* fp;fp = fopen("input.txt", "r");if (fp == NULL){printf("Sorry, your file is NULL. I can not to open it...\n");return 1;}char temp, bin[MAX];memset(bin, 0, sizeof(bin)); // initizal this array bin[] to sure finsh.int i;temp = fgetc(fp); // get file informationfor (i = 0; temp != EOF; ++i){bin[i] = temp;temp = fgetc(fp);}int len = strlen(bin);printf("The original characters of the flow:");for (i = 0; i < len; ++i){printf("%c", bin[i]);}printf("\nbin len = %d\n", len);/* 0 bit filling */char aux[MAX]; // auxiliary arraymemset(aux, 0, sizeof(aux));int m, flag; // flag is used to record the number of "1" states for (i = 0, m = 0, flag = 0; i < len; ++i){if (flag != 5){aux[m] = bin[i];if (bin[i] == '1'){++flag;}else{flag = 0;}++m;}else{ flag = 0;}}len = strlen(aux);printf("After filling the character of flow:");for (i = 0; i < len; ++i){printf("%c", aux[i]);}printf("\nbin len = %d\n", len);fclose(fp);return 0;
}
input.txt文件可以如下:
10110101110011111011011111010111110000011111001110
结尾:
当然你也可以把这两个程序写成一个程序,笔者只是为了让读者能更好地理解这个东西才用两个程序代码来实现。。。
模拟计算机网络中的零比特填充相关推荐
- 【计算机网络】数据链路层 : 封装数据帧 ( 附加信息 | 帧长度 | 透明传输 | 字符计数法 | 字符填充法 | 零比特填充法 | 违规编码法 )
文章目录 一. 封装数据帧 二. "数据帧" 附加信息 三. "数据帧" 帧同步 四. "数据帧" 长度 五. "数据帧" ...
- 数据链路层 功能 封装成帧 透明传输 字符计数法 字符填充法 零比特填充法 违规编码法 传输中的差错 差错控制 冗余编码 奇偶校验码 CRC循环冗余码 检错过程 细解 图解 通俗易懂
粉丝不过W 数据链路层: 结点:主机.路由器 链路:网络中两个结点之间的物理通道,链路的传输介质:双绞线.光纤和微波,分为有线链路.无线链路 数据链路:网络中两个结点之间的逻辑通道,把实现控制数据传输 ...
- 理解字节填充和零比特填充
https://juejin.im/post/6844904084525301773 点对点协议 PPP(Point to Point Protocol)即点对点协议,运行在数据链路层,为在点对点连接 ...
- 3.2.1 封装成帧、帧定界、帧同步、透明传输(字符计数法、字符串的首尾填充法、零比特填充的首尾标志法、违规编码法)(转载)
原文链接:https://blog.csdn.net/weixin_43914604/article/details/104779973 本博客为个人学习.研究或者欣赏用,如有侵权,请与我联系删除,谢 ...
- PPP协议使用同步传输技术传送比特串0110111111111100。试问经过零比特填充后变成怎样的比特串?若接收端收到的PPP帧的数据部分是0001110111110111110110,问删除发送端
比特填充法的具体做法是:在发送端,当一串比特流尚未加上标志字段时,先用硬件扫描整个帧.只要发现5个连续1,则立即填入一个0.因此经过这种零比特填充后的数据,就可以保证不会出现6个连续1.在接收一个帧时 ...
- 零比特填充算法 HUSTOJ-1076 21.1.7
javas输入输出.String类 public class test1 { public static void main(String[] args){ Scanner s ...
- 计算机网络中的OSI模型和TCP/IP模型
在计算机网络工程中,我们总听过有几层几层的,有的说七层,有的说五层.其实就算我们不清楚每层是什么,也应该听过有分什么应用层.物理层啊啥的.本篇就详细的讲述一下,关于计算机网络的这些所谓的层都是怎么来的 ...
- 计算机网络——计算机网络中的安全
安全通信的特性 机密性 仅有发送方和希望的接收方能够理解传输报文的内容. 报文完整性 通信的内容在传输过程中未被改变--或者恶意篡改或者意外改动. 端点鉴别 发送方和接收方都应该能证实通信过程所涉及的 ...
- 计算机网络中的网络安全
文章目录 一.什么是网络安全? 二.密码学的原则 对称密钥体制 公开密钥加密 三.报文完整性和数字签名 密码散列函数 报文鉴别码 数字签名 四.端点鉴别 五.安全电子邮件(应用层) 六.使用TCP连接 ...
最新文章
- 深入解析Python中的变量和赋值运算符
- WPF触发器(Trigger)
- android stdio 日志追踪,通过检测您的应用生成跟踪日志
- word文档怎么找回误删的文件_word文件数据恢复|word文件不小心删除怎么恢复?...
- 学数学建模算法对计算机的好处,浅议数学建模与算法
- LG手机无法连接adb
- 等级保护第三级安全扩展要求笔记(2019)
- Android模拟器加载自定义镜像
- RTL8111/8168B PCI EXPRESS 网卡驱动 下载
- 一文讲清微服务架构、分布式架构、微服务、SOA
- 商品规格参数数据库设计
- 2022-2028年中国现代服务行业企业投资项目指引及机会战略分析报告
- 因果分析.科学实验评估
- java.lang.IllegalArgumentException: Result Maps collection already contains value for ciis.zht.model
- scp 传目录_scp传输文件的命令
- error: You have not concluded your merge (MERGE_HEAD exists).解决
- EL表达式中获取 list集合长度
- Android各国语言Values文件夹命名规则
- JS事件处理这一篇就够了!!
- Kasan - Linux 内核的内存检测工具
热门文章
- [ACTF新生赛2020]fungame
- 设计模式--备忘录(Memento)模式
- [Issue Fixed]-repo-error: .repo/manifests/: contains uncommitted changes
- [pasecactf_2019]tornado_casino
- Linux基础维护——笔记
- 文字链接_新生命道目录及音频、文字链接(20200501更新)
- 【基于Web攻击】的方式发现并攻击物联网设备,又是一个入狱小技巧
- Python PIL库总结
- 017 Android加固之APK混淆和保护方式
- 160个Crackme038之P-Code初窥门径