以太局域网就用曼彻斯特编码的,大部分用硬件实现的,网上有曼彻斯特编码的c实现:
//---------------------------------------------------------------------------- |
// 标题: 曼彻斯特和差分曼彻斯特编码的实现 |
// 分析:曼彻斯特编码是将每个码元的中央实现跳变,具体的码字表示为: |
// 1->10,0->01. |
// 差分曼彻斯特编码每个码元依前一码元而定,遇1跳变,遇0保持 |
// 若前为:01,则1->10 0->01 |
// 若前为:10,则1->01 0->10 |
// 实现:定义两个数组,一个用来放置输入要编码的序列,另一个用来放编码后的序列 |
// |
// |
//----------------------------------------------------------------------------
/**/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 头文件
#include <stdio.h>
#include <assert.h>
#include<string.h>
/**/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 全局变量
#define m 10
int j; //指向编码后序列的数组下标
int i; //输入码字的数组下标
int length; //求值输入数组的长度
/**/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 参数表
int direct_code(char str0[]) //直接编码
...{
char dirct_code[2*m];
memset(dirct_code,0,2*m);
dirct_code[0]=Ɔ'
dirct_code[1]=Ƈ'
j=2;
extern length;
for(i=0;i<length;i++)
...{
// 循环入口数据
printf("current character is: %c ",str0);
// 循环处理,0 ->01 1 ->10
if(str0==Ɔ') ...{dirct_code[j++]=Ɔ'dirct_code[j++]=Ɔ'}
else if(str0==Ƈ') ...{dirct_code[j++]=Ƈ'dirct_code[j++]=Ƈ'}
else ...{printf("input error,exit........ "); return 1;} // 输入出错
// 循环处理后数据
printf("-----");
printf("after process: %c%c ",dirct_code[j-2],dirct_code[j-1]);
}
// 结果字符串加上终结符
dirct_code[j]=0;
// 输出结果
printf("------------------------------------------- ");
printf("direct_code coding is:%s ",dirct_code);
return 0;
}
int manchester(char str0[]) //曼彻斯特编码
...{
char manchester[2*m];
memset(manchester,0,2*m);
manchester[0]=Ɔ'
manchester[1]=Ƈ'
j=2;
extern length;
for(i=0;i<length;i++)
...{
// 循环入口数据
printf("current character is: %c ",str0);
// 循环处理,0 ->01 1 ->10
if(str0==Ɔ') ...{manchester[j++]=Ɔ'manchester[j++]=Ƈ'}
else if(str0==Ƈ') ...{manchester[j++]=Ƈ'manchester[j++]=Ɔ'}
else ...{printf("input error,exit........ "); return 1;} // 输入出错
// 循环处理后数据
printf("-----");
printf("after process: %c%c ",manchester[j-2],manchester[j-1]);
}
// 结果字符串加上终结符
manchester[j]=0;
// 输出结果
printf("------------------------------------------- ");
printf("manchester coding is :%s ",manchester);
return 0;
}
int dif_manchester(char str0[]) //差分曼彻斯特编码
...{
char dif_manch[2*m];
memset(dif_manch,0,2*m); //初始化数组
dif_manch[0]=Ɔ'
dif_manch[1]=Ƈ'
j=2;
extern length;
for(i=0;i<length;i++)
...{
// 循环入口数据
printf("current character is: %c ",str0);
// 循环处理,0 ->01 1 ->10
if(str0==Ɔ')
...{
dif_manch[j++]=dif_manch[j-3];
dif_manch[j++]=dif_manch[j-2];
}
else if(str0==Ƈ')
...{
dif_manch[j++]=dif_manch[j-2];
dif_manch[j++]=dif_manch[j-3];
}
else ...{printf("input error,exit........ "); return 1;} // 输入出错
// 循环处理后数据
printf("-----");
printf("after process: %c%c ",dif_manch[j-2],dif_manch[j-1]);
}
// 结果字符串加上终结符
dif_manch[j]=0;
// 输出结果
printf("------------------------------------------- ");
printf("dif_manchester coding is :%s ",dif_manch);
return 0;
}
/**/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// 入口点
int main(int argc, char* argv[])
...{
char str0[m];
// 获取输入数据
printf("please input the number string u want(it must less than 10): ");
scanf("%s",str0);
// 验证输入数据是否正确,可以用assert之类
printf("what u input is------:: %s ",str0);
length=strlen(str0);
assert(length <m ); //设置断言,数组越界检查
// 输出数据区置0
//memset(str1,0,2*m);
direct_code(str0);
manchester(str0);
dif_manchester(str0);
return 0;
}
/**///////////////////////////////////////////////////////////////////////////////
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/**/////////////////////////////////////////这是刚刚开始自己写的程序////////////////////////////////////////////////////////////////////////
#define m 10
#include<stdio.h>
void main()……
正确与否不清楚哦,自己验证吧