零比特插入代码C++

       首先要了解什么是零比特插入  :点对点协议PPP(Point-to-Point Protocol)是目前使用得最广泛的数据链路层协   议。现在大部分用户是使用电话线拨号接入因特网的。而从用户计算机到ISP的链路所使用的数据链路层协议就是PPP协议。PPP协议必须保证数据传输的透明性。这就是说,不能限制网络层交下来的分组中不许出现某种比特组合。只要不出现传输差错,所有的数据都必须原封不动地传送到相邻结点。如果数据中碰巧出现了和帧定界符一样的比特组合时,就要采取有效的措施来解决这个问题。
PPP协议中,用在SONET/SOH链路时,是使用同步传输,而不是异步传输,这种情况下,PPP协议采用0比特填充的方法实现透明传输.
PPP帧格式

7E    A
FF    C
03    协议    信息部分    FCS    F
7E
标志字段F(Flag)规定为0X7E,0X1E即:01111110
具体方法:
在发送端扫描整个信息字段,只要发现5个连续1,则立即填入1个0,因此在经过这种0比特填充后,可保证信息字段中不会出现6个连续1.在接收端收到1个帧时,先找到标志字段F,以确定一个帧边界,接着再对后面的比特流扫描,每当发现5个连续1时,就把这5个连续1后的一个0删除,以还原后来的信息比特流.这样就保证了透明传输,在所传输的数据比特流中可以传送任意组合的比特流,而不会引起对帧边界的判断错误。
①信息字段中出现了和               0101111110001010
标志字段F完全一样             会被误认为是标志字段F
的8比特组合
②发送端在5个连续的               01011111010001010
1之后填入0比特再              发送端填入0比特
发送出去
③在接收端把5个连续               010011111010001010
的1之后的0比特删除            接收端删除填入的0比特

 

  算法部分:

发送端:  利用两个数组s1和s2 其中s1存发送的二进制数,s2初始为空 遍历s1的数,同时将s1中的数依次赋值给s2,当出现1时count加1,出现0时count=0,当count=5时,s2的下一个值为0,且s2指向下一个,count=0.输出s2

代码:

 

#include<iostream>

#include<string>

using namespace std;

int main()

{

    int n;

    cout<<"输入字符串长度:"<<endl;

    cin>>n;

    string s1,s2;

    int i=0;

    int j=0;

    int count=0;

    cout<<"请输入二进制数:"<<endl;

    cin>>s1;

 

    for(i=0,j=0;i<n;i++,j++){

        s2[j]=s1[i];

        if (s1[i]=='1') count++;

        else count=0;

        if (count==5){

            j++;

            s2[j]='0';

        }

    }

    cout<<"输出结果:"<<endl;

    for(i=0;i<11;i++){

        cout<<s2[i];

    }

    cout<<endl;

}

 

接收端:  同样两个数组s1和s2,便利且赋值,当s1中出现5个1时i减1。输出s2

代码:

 

#include<iostream>

#include<string>

using namespace std;

int main()

{

    int n;

    cout<<"输入字符串长度:"<<endl;

    cin>>n;

    string s1;

    int i=0;

    int count=0;

    cout<<"请输入二进制数:"<<endl;

    cin>>s1;

    cout<<"输出结果:"<<endl;

    for(i=0;i<n;i++){

        cout<<s1[i];

        if (s1[i]=='1') count++;

        else count=0;

        if (count==5){

            i++;

        }

    }

    cout<<endl;

}

b68fdefc782644c694af6dcf9f848b18.png

95bcb9fe06544c9c92cb9edbcb60ce94.png 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值