當前位置:
首頁 >
模拟计算机网络中的零比特填充
發布時間:2025/3/20
19
豆豆
生活随笔
收集整理的這篇文章主要介紹了
模拟计算机网络中的零比特填充
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概述:
? ? 學網絡的時候,學到一個零比特填充法。是用來保證數據在網絡中傳輸的時候有一個比較穩妥的方式不產生錯誤。用零比特填充是因為我們要讓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
結尾:
當然你也可以把這兩個程序寫成一個程序,筆者只是為了讓讀者能更好地理解這個東西才用兩個程序代碼來實現。。。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的模拟计算机网络中的零比特填充的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模拟网络通信中存储转发的分组交换算法
- 下一篇: 北大OJ百练——4075:矩阵旋转(C语